PassportJS自定义validationcallback未调用

更新:下面的错误是由提交修复的。 我已经把第一个答案标记为“正确的”,尽pipe在其中一个评论中引起了我的注意

我希望利用自定义callback来处理loginPassport的身份validation本地策略的成功和失败,但它看起来只是成功调用。

这里是我正在谈论的一个片段:

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 }); 

任何想法,为什么这可能是这样的? 我以为这个callback会被调用,所以我可以自己处理错误。

如果您想要传播authentication失败(用户名/密码不匹配),则不应该生成错误,而是将user设置为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); }); 

err是为在身份validation过程中发生的exception而保留的,例如,如果您遇到DB错误等。 但是,虽然护照文件显示这些错误将被传递给passport.authenticate鉴定callback,但他们似乎(这是为什么它不适合你的原因)。