Passport自定义回调如何工作?

时间:2016-09-28 01:51:42

标签: javascript node.js express passport.js

我不理解这个例子

app.get('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  })(req, res, next);
});

我在这里看到的是

app.get('path', function(req, res, next) {/*bunch of code*/})(req, res, next)

这是如何工作的,因为它不是对后面的函数的引用(req,res,next)?

1 个答案:

答案 0 :(得分:2)

您的简化示例有点偏差,可能是因为括号不匹配等...

如果我减少"官方"自定义回调的护照示例,我得到:

app.get('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
  })(req, res, next);
});

所以我的第一个假设是(req, res, next)被传递给从passport.authenticate返回的快速中间件兼容函数。

如果我围绕the authenticate code on GitHub,约81行左右(截至本文撰写时),它看起来就像是从以下情况发生的事情:

return function authenticate(req, res, next) {
    /* lots and lots of lines follow */
}