【问题标题】:PassportJS Custom Authenticate Callback Not Called未调用 PassportJS 自定义身份验证回调
【发布时间】:2013-12-10 23:26:21
【问题描述】:

更新:a commit 修复了以下错误。我已将第一个答案标记为“正确”,尽管该提交在其中一个 cmets 中引起了我的注意

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

这是我正在谈论的内容的一个sn-p:

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

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

【问题讨论】:

    标签: javascript node.js express passport.js


    【解决方案1】:

    如果您想传播身份验证失败(用户名/密码不匹配),则不应生成错误,而是将 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 保留用于身份验证过程中发生的异常,例如,如果您收到 DB 错误等。但是,尽管 Passport 文档建议将这些错误传递给 passport.authenticate 回调,但它们似乎没有(这就是它不适合您的原因)。

    【讨论】:

    • 是的,只是以这些为例。所以我想这没有解决方法吗?
    • @funseiki 查看 Passport 代码,“正确”错误沿中间件链传递,而不是回调。除了设置一个全局 Express 错误处理程序来处理这些错误之外,恐怕您对此无能为力。
    • 如果提供了自定义回调,错误现在会传播给它。请参阅此处了解更多信息:github.com/jaredhanson/passport/issues/186
    • @robertklep 我在 passport.authencate 中得到错误、用户、信息为空、假、缺少凭据。我没有将用户设置为假。你能看看我的问题stackoverflow.com/questions/42898027/…
    猜你喜欢
    • 2017-10-01
    • 1970-01-01
    • 2013-11-19
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    相关资源
    最近更新 更多