Passport bcrypt 密码与数据库中的密码不同

Passport bcrypt password is different than password from db

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

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

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

Whosebug 
a$uoJH1Wo9b7SQploRptfODe1Q2kRC3skQoUNOIhAmHg2AWykWQwGvW

当我使用密码 Whosebug

登录用户 Whosebug@whosebug.com
var hashedpassword = bcrypt.hashSync(password);
console.log(password);
console.log(hashedpassword);

Whosebug
a$aq869JEMWBQ8vCfXfuRvlOPdUvq.UhTz4Ge.kB3n7wSyvhjBsm8r2

所以即使我使用相同的 bcrypt 模块,每次登录时哈希值都不一样。

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

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

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

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