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);
在我的 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);