更新:以下错误已修复a commit https://github.com/jaredhanson/passport/issues/186。我已将第一个答案标记为“正确”,尽管该提交在其中一条评论中引起了我的注意
我希望利用自定义回调来处理 Passport 中登录的成功和失败验证本地策略 http://passportjs.org/guide/authenticate/,但看起来它只是调用成功。
这是我正在谈论的内容的一个片段:
passport.use(new LocalStrategy(
{usernameField: 'email', passwordField: 'password'},
function(email, password, done) {
if(canLogin) done(null, user);
else done({message: "This is an error message" }, false, { message: "Some Info" });
}
));
app.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
// Only called if err is not set
});
知道为什么会出现这种情况吗?我的印象是回调会被调用,这样我就可以自己处理错误。
如果您想传播身份验证失败(用户名/密码不匹配),则不应生成错误,而应设置user
to false
并传递一个理由:
passport.use(new LocalStrategy(
{usernameField: 'email', passwordField: 'password'},
function(email, password, done) {
if (canLogin)
done(null, user);
else
done(null, false, { message: 'Invalid login credentials' });
}
));
...
app.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (user === false) {
// handle login error ...
} else {
// handle successful login ...
}
})(req, res, next);
});
The err
为身份验证过程中发生的异常保留,例如,如果您收到数据库错误等。但是,尽管 Passport 文档表明这些错误将传递给passport.authenticate
回调,他们似乎没有(这就是它不适合你的原因)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)