javascript – PassportJS自定义验证回调未被调用

前端之家收集整理的这篇文章主要介绍了javascript – PassportJS自定义验证回调未被调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
更新:以下错误a commit修复.我已将第一个答案标记为“正确”,尽管在其中一条评论中引起了我的注意

我希望利用自定义回调来处理Passport authenticate local strategy登录的成功和失败,但它看起来只是在成功时调用.

这是我正在谈论的片段:

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

知道为什么会这样吗?我的印象是回调会被调用,所以我可以自己处理错误.

解决方法

如果要传播身份验证失败(用户名/密码不匹配),则不应生成错误,而应将用户设置为false并传递原因:
passport.use(new LocalStrategy(
  {usernameField: 'email',done) {
    if (canLogin)
      done(null,user);
    else 
      done(null,{ message: 'Invalid login credentials' });
  }
));
...
app.post('/login',next) {
  passport.authenticate('local',info) {
    if (user === false) {
      // handle login error ...
    } else {
      // handle successful login ...
    }
  })(req,next);
});

错误保留用于在身份验证过程中发生的异常,例如,如果出现DB错误等.但是,尽管Passport文档表明这些错误将传递给passport.authenticate回调,但它们似乎并不存在(这就是为什么它不能为你工作的原因).

猜你在找的JavaScript相关文章