web-dev-qa-db-ja.com

「バイト」オブジェクトには属性「エンコード」がありません

各ドキュメントをコレクションに挿入する前に、ソルトとハッシュされたパスワードを保存しようとしています。ただし、ソルトとパスワードをエンコードすると、次のエラーが表示されます。

 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フレームワークを使用しています

13
DEVV911

.getsalt()メソッドからのsaltbytesオブジェクトであり、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'])
0
MarianD