2016-08-18 34 views
2

在我的local-register中,我將用戶數據存儲在數據庫中。哈希密碼我用bcrypt:護照bcrypt密碼與db的密碼不同

console.log(password); 
password = bcrypt.hashSync(password); 
console.log(password); 

如果我註冊了一個用戶與密碼stackoverflow密碼看起來是這樣的:

stackoverflow 
$2a$10$uoJH1Wo9b7SQploRptfODe1Q2kRC3skQoUNOIhAmHg2AWykWQwGvW 

當我登錄時的用戶[email protected]與密碼stackoverflow

var hashedpassword = bcrypt.hashSync(password); 
console.log(password); 
console.log(hashedpassword); 

stackoverflow 
$2a$10$aq869JEMWBQ8vCfXfuRvlOPdUvq.UhTz4Ge.kB3n7wSyvhjBsm8r2 

因此,儘管我使用相同的bcrypt模塊,但每次登錄時散列值都不相同。

回答

3

我不明白bcrypt的內部工作原理,但是每次哈希對於同一個字符串可能看起來不同,因爲鹽是作爲哈希的一部分生成的。因此,你不能做:

stored = hash(old); 
guess = hash(guess); 
valid = stored == guess; 

相反,你必須使用compare方法,如:

/* password is *not* hashed! */ 
bcrypt.compare(password, usersHashedPassword, cb); 
+0

什麼是CB的呢?回電話?我得到一個錯誤'cb'未定義。 –

+0

@PeterBoomsma是的 - 你也可以使用'.compareSync' –

+0

好吧,我最終把它包裝在一個包裝中。如果(bcrypt.compareSync(password,current.password)){console.log('true') }其他{ console.log('false') return done(null,false); }' –