Я создаю аутентификацию имени пользователя и пароля для флеш-приложения. Когда пользователь подписывается, я сохраняю имя пользователя и пароль в документе mongodb.не может аутентифицировать хешированный пароль в Flask
Это моя модель пользователя:
class User():
def __init__(self, userid=None,username=None,password=None):
self.userid= userid
self.username = username
self.password = generate_password_hash(password)
def __repr__(self):
return '<User %r>' % self.username
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
try:
return unicode(self.userid)
except NameError:
return unicode(self.userid)
Я использую методы библиотеки Werkzeug generate_password_hash и check_password_hash для генерации/проверки пароля, соответственно.
Это мой код для сброса пользовательских данных в MongoDB:
def db_dump(data):
k = {'username':data.username,'password':data.password}
db.users.insert(k,True)
И это мой код для извлечения пользовательских данных по имени пользователя:
def find_by_username(username):
data = self.db.users.find_one({'username': username})
user = User(userid=unicode(data['_id']),username=data['username'],password=data['password'])
return user
Вот моя проблема. Предположим, у меня есть пользовательский jon, у которого есть пароль abcd. Когда я запускаю код для проверки хэша пароля для нового пользователя через консоль, она отлично работает:
>> check_password_hash(generate_password_hash('abcd'),'abcd')
True
Однако, после того, как «джон» подписался и его информация была сброшена в базу данных, на последующий Войти попытка, в которой я должен извлечь зашифрованный пароль из базы данных, проверка не работает:
>>check_password_hash(find_by_username('jon').password,'abcd')
False
Любая идея, почему это происходит? После некоторого googling мой первый инстинкт заключается в том, что, возможно, мне нужно сохранить или получить хэш-пароль в mongodb по-другому, так как кажется, что он хранится в виде строки. Есть идеи?
Вы решили эту проблему? – aezell