【问题标题】:SQL Server adds b'...' to the jwt tokens I storeSQL Server 将 b'...' 添加到我存储的 jwt 令牌中
【发布时间】:2017-10-29 19:23:42
【问题描述】:

我在 SQL Server 数据库中存储用于 Web 服务身份验证的 JWT 令牌。我已将包含标记的列声明为 nvarchar(max) 类型,并将它们作为简单字符串传递到数据库中。当我插入令牌时,SQL Server 将 b'...' 添加到它。例如,假设我添加令牌 ABC123,然后它存储 b'ABC123'。

这会导致问题,因为当我将存储在数据库中的令牌与通过 api 传递的令牌进行比较时,由于额外的字符,比较失败(数据库似乎确实添加了一个小写 b 和存储字符串的两个单引号)。

我知道一旦我从数据库中提取字符串,我就可以去掉 b 和引号,但我想知道 SQL Server 为何这样做以及如何防止它这样做。

无论如何,任何见解都将不胜感激。

编辑:pyodbc 有可能这样做吗?这是我要插入的代码:

cnxn = pyodbc.connect("<connection string>")
crsr = cnxn.cursor()
crsr.execute("insert into jwt values (?,?)", [userId, str(auth_token)])

也许它混淆了 Python 3 和 Python 2 字符串? (我使用的是 Python 3.6。)在这种情况下,我将如何解决它?

【问题讨论】:

  • SQL Server 没有这样做。显示您用于插入的代码。
  • 我不这么认为,我认为你插入它,我建议你检查你的代码。

标签: python sql-server pyodbc nvarchar


【解决方案1】:

原来是python的“str”转换。 jwt.encode 返回一个字节数组,然后 str 变成 b'...'。解决方案是显式解码字节而不是使用 str。所以我的新插入方法是:

crsr.execute("insert into jwt values (?,?)", [userId, auth_token.decode("utf-8")])

确实是一个简单的解决方案,但非常晦涩难懂。希望我在这方面的努力可以帮助其他人!

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 2018-11-12
    • 2019-02-01
    • 2022-01-15
    • 2015-09-15
    • 2016-09-13
    • 1970-01-01
    • 2021-06-19
    • 2021-01-17
    相关资源
    最近更新 更多