如何在Express中间件中使用passport.authenticate(...)中的next()?

时间:2017-02-28 14:13:04

标签: node.js express passport.js passport-local

我有一个简单的护照设置,我的登录路线采用local策略。我不知道如何正确使用身份验证功能作为中间件。这是我在控制器之前调用/login路由的中间件:

exports.requireLogin = (req, res, next) => {
  passport.authenticate('local', { session: false }, (err, user, info) => {
    if (err) {
      next(err);
    } else if (!user) {
      res.status(401).json(info.message);
    } else {
      req.login(user, (loginError) => {
        if (loginError) {
          console.log('error here');
          next(new Error('test'));
        } else {
          next();
        }
      });
    }
  })(req, res, next);
};

如您所见,使用中间件参数立即调用护照功能。这就是我在Stackoverflow上发现的如何在该函数中使用next。

现在由于某种原因不起作用。该错误并未真正处理为错误。我通过将一个无错误的中间件作为express中的最后一个可能端点并将其记录下来来检查这一点。我可以看到它在错误传递到error here的行之前注销了next,但它也会在之后检查正常中间件被调用的检查。

据我所知,当您将错误传递给下一个时,Express不应该调用任何正常的中间件。为什么这个例子不起作用?

0 个答案:

没有答案