J'essaie de stocker le sel et le mot de passe haché avant d'insérer chaque document dans une collection. Mais lors de l’encodage du sel et du mot de passe, il affiche l’erreur suivante:
line 26, in before_insert
document['salt'] = bcrypt.gensalt().encode('utf-8')
AttributeError: 'bytes' object has no attribute 'encode'
Ceci est mon code:
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'])
J'utilise eve framework dans virtualenv avec python 3.4
Vous utilisez:
bcrypt.gensalt ()Cette méthode semble générer un objet octet. Ces objets n'ont aucune méthode de codage car ils ne fonctionnent qu'avec des données compatibles ASCII. Vous pouvez donc essayer sans .encode ('utf-8')
Le salt de la méthode .getsalt()
est un objet bytes, et tous les paramètres "salt" des méthodes du module bcrypt l'attendent sous cette forme particulière. Il n'est pas nécessaire de le convertir en autre chose.
Contrairement à cela, les paramètres "password" dans les méthodes du module bcrypt sont attendus sous la forme de la chaîne Unicode - en Python 3, il s’agit simplement d’une chaîne string.
Donc, en supposant que votre document['password']
original soit un string, votre code devrait être
def before_insert(documents):
for document in documents:
document['salt'] = bcrypt.gensalt()
password = document['password']
document['password'] = bcrypt.hashpw(password, document['salt'])