NodeJS bcryptjs比较不按预期工作,即使在立即检查后也始终返回false

exdqitrt  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(159)

我已经被这个问题难倒了一段时间,不知道为什么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();
})```
2lpgd968

2lpgd9681#

这是因为你slice的密码,然后添加一个空格在它前面,当你分配original的值。这当然与密码的值不同。
假设密码为"Password"
这将使我们得到" assword"作为original的值,这显然不同于"Password",因此brypt.compare将始终返回false,因为您比较了两个不同的东西。

相关问题