私はpython(pymongo)とbcryptを使ってmongodbのログインメソッドを実装しようとしています。問題は、私がハッシュを比較しようとするときに来る、彼らはいつも異なっている:$。authのbcryptメカニズム(マッチハッシュなし)
これは私のテストコード(私はハッシュ化されたパスワードを使用して、MongoDBのユーザーに入れまず第一)である:、私たちは、DBに入れたら
bcrypt.hashpw('testpassword', bcrypt.gensalt(12))
'$2a$12$K1hnCm5z74QtXaynv4.S8.i1FK9xjRr7JSPCRCyB9zpv8xZznZGFi'
db.users.insert({username: "yichuan",password: "$2a$12$K1hnCm5z74QtXaynv4.S8.i1FK9xjRr7JSPCRCyB9zpv8xZznZGFi" });
:
ニシキヘビscryptを使用してD::」魔法をしようとしてmは
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
そして、はい、私はデシベルは私に正しいフィールドを与えていることを確信しています。
今私は理解しているが、ログインのために、私は問題がある。クライアントがde bcrypt関数を作成し、ハッシュを送信してサーバーで比較する必要があります。私はすべての接続のための魚の塩を入れればそれは大丈夫だろうか? –
クライアントからハッシュが送信され、データベースのパスワードと比較する必要がありますか?問題がなければ、 'bcrypt.hashpw(、) 'を計算して、クライアントが送ったのと同じハッシュになったかどうかを調べてください。 –
ああ、待って...あなたのデータベースに平文のPwはありませんよね? –