Я пытаюсь реализовать метод входа в систему для mongodb, используя python (pymongo) и bcrypt.проблема возникает, когда я пытаюсь сравнить хэши, они всегда разные: $.
Это мой тестовый код (прежде всего я ввел в mongodb пользователя с хэшем пароля):
используя pythons scrypt:
bcrypt.hashpw('testpassword', bcrypt.gensalt(12))
'$2a$12$K1hnCm5z74QtXaynv4.S8.i1FK9xjRr7JSPCRCyB9zpv8xZznZGFi'
db.users.insert({username: "yichuan",password: "$2a$12$K1hnCm5z74QtXaynv4.S8.i1FK9xjRr7JSPCRCyB9zpv8xZznZGFi" });
Как только мы поместили его в БД, я пытаюсь создать магию: D:
def test_connectionManagerLoginPass(self):
connectionmanager=dbconnection.ConnectionManager()
username='yichuan'
password='testpassword'
hashed = bcrypt.hashpw(password, bcrypt.gensalt(12))
self.assertIsNotNone(connectionmanager.login(username,hashed), 'No error espected in login')
Но проблема возникает, когда я вижу хэшируется значение:
'$2a$12$hw1DaWdOf3ECBcSgu2GB4Of3oAdKvyzl0xftBVzbyqkjK2A3X.LOm'
это совершенно отличается от того, который я сгенерировал ранее !!! .Также я читал, что мне не нужно сохранять bcrypt.gensalt (12).Так что я немного запутался.
Спасибо за чтение. Любая помощь с тем, что не так в моей реализации аутентификации?
posdata (больше кода) :
def login(self,username,password):
if self.loginfieldsfilter(username,password):
dbdata = self.users.find_one({'username': username})
if password == dbdata[ 'password' ]:
return True
else:
return None
else:
return None
И да, я уверен, что БД дает мне правильные поля.