Python(pymongo)とbcryptを使用して、mongodbのログインメソッドを実装しようとしています。問題は、ハッシュを比較しようとすると発生します。ハッシュは常に異なります:$。
これは私のテストコードです(まず、パスワードをハッシュしたユーザーを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" });
それをdbに入れたら、魔法を作ろうとしています: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
そして、はい、私はデータベースが私に正しいフィールドを与えていると確信しています。