我在REST调用中对用户进行身份验证,并按照文档中的说明实现自定义回调。
app.get('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
//.. do something with user here and send a response
})(req, res, next);
});
现在,如果策略中的某些验证失败,我想传递一个错误。
passport.use(new BasicStrategy(
function(email, password, callback) {
User.findOne({
email: email
}, function(err, user) {
if (err) {
return callback(err);
}
if (!user) {
return callback(new Error('User unknown'), false);
}
// Make sure the password is correct
user.verifyPassword(password, function(err, isMatch) {
if (err) {
return callback(err);
}
// Password did not match
if (!isMatch) {
return callback(new Error('Password mismatch'), false);
}
// Success
return callback(null, user);
});
});
}
但错误永远不会传递给authenticate
中的回调:
function(err, user, info) {
// err is always null
}
如何传递错误以便我可以向用户提供更详细的反馈?
答案 0 :(得分:0)
我发现您的代码存在两个问题。第一个是您要求本地'注册BasicStrategy时的身份验证策略。为了做到这一点,你应该替换当地的'与' basic'。
第二个是,如果你想使用BasicStrategy,你必须使用HTTP协议支持的基本身份验证,否则不会调用BasicStrategy的回调,你的身份验证回调将运行错误== null和user == false。
我使用Postman进行了测试,只有在我发送Basic Auth信息后,才会运行BasicStrategy回调。
我希望这会有所帮助。