bcrypt compareSync此方法始终返回false。即使密码与db字段匹配。为什么它返回false我的代码中的错误是什么?
**//route for login backend
router.post('/authenticate',function(req,res){
User.findOne( { username:req.body.username } ).select('email username password').exec(function(err, user){
if(err) throw err;
if(!user){
res.json({"success":false,"message":"authentication failed"});
}
else if(user){
var validPassword = user.comparePassword(req.body.password);
if(!validPassword){
res.json({"success":false,"message":"couldnot asuthenticate"});
} else{
res.json({"success":true,"message":"authenticated"});
}
}
})
});
//compare function
UserSchema.methods.comparePassword = function(password)
{
return bcrypt.compareSync(password, this.password);
};**
更新
1.我的错误是在我使用的预保存中间件
2.错误导致
UserSchema.pre('save', function(next) {
var user = this;
bcrypt.hash(user.password, null,null, function(err, hash) {
if(err) return next(err);
user.password = hash;
});
next();
});
3.下一个();函数在我的哈希函数之外调用。这就是我的比较结果总是错误的原因。
4.应该是:
UserSchema.pre('save', function(next) {
var user = this;
bcrypt.hash(user.password, null,null, function(err, hash) {
if(err) return next(err);
user.password = hash;
next();
});
});