各ドキュメントをコレクションに挿入する前に、ソルトとハッシュされたパスワードを保存しようとしています。ただし、ソルトとパスワードをエンコードすると、次のエラーが表示されます。
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'])
python 3.4でvirtualenvでeveフレームワークを使用しています
.getsalt()
メソッドからのsaltはbytesオブジェクトであり、bcryptモジュールのメソッドのすべての「salt」パラメーターは、この特定の形式でそれを想定しています。 。それを別のものに変換する必要はありません。
それとは対照的に、bcryptモジュールのメソッドの「パスワード」パラメータは、nicode文字列-in Python 3それは単にa- 文字列。
だから-あなたの元の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'])