在将每个文档插入集合之前,我正在尝试存储salt和哈希密码。但在编码salt和密码时,它显示以下错误:
line 26, in before_insert
document['salt'] = bcrypt.gensalt().encode('utf-8')
AttributeError: 'bytes' object has no attribute 'encode'
这是我的代码:
def before_insert(documents):
for document in documents:
document['salt'] = bcrypt.gensalt().encode('utf-8')
password = document['password'].encode('utf-8')
document['password'] = bcrypt.hashpw(password, document['salt'])
我在virtualenv中使用eve框架和python 3.4
答案 0 :(得分:3)
您正在使用:
bcrypt.gensalt()此方法似乎生成一个字节对象。这些对象没有任何编码方法,因为它们仅适用于ASCII兼容数据。所以你可以尝试不用 .encode(' utf-8')
答案 1 :(得分:0)
.getsalt()
方法中的 salt 是一个 bytes对象,bcrypt模块方法中的所有“ salt”参数在此特定情况下都期望它形成。无需将其转换为其他内容。
与之相反,bcrypt模块的方法中的“密码”参数应以 Unicode字符串的形式出现-在Python 3中,它只是一个 string 。
所以-假设您的原始document['password']
是 string ,则您的代码应为
def before_insert(documents):
for document in documents:
document['salt'] = bcrypt.gensalt()
password = document['password']
document['password'] = bcrypt.hashpw(password, document['salt'])