I'm trying to store salt and hashed password before inserting each document into a collection. But on encoding the salt and password, it shows the following error:
line 26, in before_insert
document['salt'] = bcrypt.gensalt().encode('utf-8')
AttributeError: 'bytes' object has no attribute 'encode'
This is my 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'])
I'm using eve framework in virtualenv with python 3.4
You're using :
bcrypt.gensalt()This method seems to generate a bytes object. These objects do not have any encode methods as they only work with ASCII compatible data. So you can try without .encode('utf-8')
Bytes description in python 3 documentation
The salt from the .getsalt()
method is a bytes object, and all the "salt" parameters in the methods of bcrypt module expect it in this particular form. There is no need to convert it to something else.
In contrast to it, the "password" parameters in methods of bcrypt module are expected it in the form of the Unicode string - in Python 3 it is simply a string.
So - assuming that your original document['password']
is a string, your code should be
def before_insert(documents):
for document in documents:
document['salt'] = bcrypt.gensalt()
password = document['password']
document['password'] = bcrypt.hashpw(password, document['salt'])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With