(假设哈希已经完成)我正在尝试通过比较输入的密码及其在我的MongoDB集合中的哈希来进行身份验证用户功能。这是我的model.js中的方法(从bcrypt指南中复制):
PetOwnerSchema.methods.comparePassword = function(candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
if (err) return cb(err);
cb(null, isMatch);
});
};
我的controller.js:
exports.check = function (req, res) {
var email = req.body['email'];
var password = req.body['password'];
PetOwner.findOne({ "email" : email}, 'email', function(err, task) {
if (err)
res.send(err);
if ( task === null ){
res.json(0); // no matching result
console.log("Email is not yet registered");
} else {
task.comparePassword(password, task.password, function(err, isMatch) { //compare password and the already-hashed password in MongoDB
if (err) throw err;
if(isMatch){
res.json(1);
console.log("Found matching password to email");
}
else{
res.json(0);
console.log("Wrong password");
}
});
}
})
};
当我获取check方法时,节点控制台会提示我的model.js中的cb不是函数的错误。我已经尝试了几种解决方法但到目前为止还没有工作。有没有办法调试这个?
答案 0 :(得分:0)
PetOwnerSchema.methods.comparePassword = function(candidatePassword, cb)
您的函数只接受一个参数,因此您无法参考"这个"在函数之外,就像使用" this.password"。
一样如果您将要比较的密码添加为第二个参数,如下所示:
PetOwnerSchema.methods.comparePassword = function(candidatePassword, password2, cb)
然后你可以按照你想要的那样比较函数内部的两个。
希望有所帮助