Passport bcrypt密码与db的密码不同

时间:2016-08-18 13:32:38

标签: node.js bcrypt

在我的local-register中,我将用户数据存储在数据库中。要使用bcrypt哈希密码:

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

如果我使用密码stackoverflow注册用户,则密码如下所示:

stackoverflow 
$2a$10$uoJH1Wo9b7SQploRptfODe1Q2kRC3skQoUNOIhAmHg2AWykWQwGvW

当我使用密码stackoverflow@stackoverflow.com

登录用户stackoverflow
var hashedpassword = bcrypt.hashSync(password);
console.log(password);
console.log(hashedpassword);

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

因此,即使我使用相同的bcrypt模块,每次登录时哈希都会有所不同。

1 个答案:

答案 0 :(得分:3)

我不理解bcrypt的内部工作原理,但是每次哈希值对于相同的字符串看起来可能不同,因为salt是作为哈希的一部分生成的。因此,你做不到:

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

相反,您必须使用compare方法,如:

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