【发布时间】:2017-10-30 18:07:04
【问题描述】:
以下代码引发TypeError: Unicode-objects must be encoded before checking:
if request.form['username'] == admin[0][0]:
if bcrypt.checkpw(request.form['password'].encode('utf-8'), admin[0][1]):
print('checked')
但这部分代码返回True,因此打印checked:
if request.form['username'] == username[0][0]:
if bcrypt.checkpw(request.form['password'].encode('utf-8'), username[0][1]):
print('checked')
admin & username 是来自 SQLite 数据库的查询,它们返回一个包含元组的列表(即[('username')]
这两个 sn-ps 几乎相同,并且都在进行编码。所以我不确定为什么一个有效而另一个无效。
【问题讨论】:
-
显然,管理员的哈希密码作为 Unicode 字符串从数据库返回,但用户名的哈希密码不是。我不确定为什么会这样,但将
.encode('utf-8')应用于第二个参数可能会解决此问题。 -
@jasonharper 是的,修复了它!这太奇怪了。不过谢谢!