这是我的哈希密码代码,用于将现有密码与现有模块的密码进行比较,密码已在正文请求中发出:
//hash password of document that use this schema
bcrypt.hash(user.password, null, null, function (err, hashed) {
if (err) {
throw err;
} else {
user.password = hashed;
//next api
next();
}
})
});
userSchema.methods.comparePassword = function (password) {
//refer at userSchema
var user = this;
//return method of bcryot library that compare two string: original password and password hashed
return bcrypt.compareSync(password, user.password);
};
但请比较此错误消息:
Uncaught, unspecified "error" event. (Not a valid BCrypt hash.)
答案 0 :(得分:2)
解决了!!!进入数据库我有很多用户的密码没有哈希,当我尝试登录时,bcrypt.compareSync (password, user.password);
预计会有哈希密码。
答案 1 :(得分:1)
您正在使用null
两次。我打赌你已经在bcrypt.genSalt
函数中包含了这个函数(如果你没有,那么这样做)。您需要将写入第一个null
的bcrypt盐传递给它。
以下是一个完整的例子:
userSchema.pre('save', function (next) {
const SALTROUNDS = 10; // or another integer in that ballpark
const user = this;
if(!user.isModified('password')) {
return next();
}
bcrypt.genSalt(SALTROUNDS, (err, salt) => {
if (err) { return next(err); }
bcrypt.hash(user.password, salt, null, (error, hash) => {
if (error) { return next(error); }
user.password = hash;
next();
});
});
});