我已经被这个问题难倒了一段时间,不知道为什么bcryptjs.compare方法对我不起作用。这是我在保存到DB之前的哈希函数。我在提交检查之前添加了比较,它仍然是假的。为什么会失败?
userSchema.pre('save', async function(next){
if(!this.isModified('password')){
return next();
}
var original = (' ' + this.password).slice(1);
this.password = await bcrypt.hash(this.password,10);
console.log(await bcrypt.compare(original,this.password)+": trying online test")
next();
})```
1条答案
按热度按时间2lpgd9681#
这是因为你slice的密码,然后添加一个空格在它前面,当你分配
original
的值。这当然与密码的值不同。假设密码为
"Password"
这将使我们得到
" assword"
作为original
的值,这显然不同于"Password"
,因此brypt.compare
将始终返回false,因为您比较了两个不同的东西。