Passport Js文档自定义回调语法

时间:2018-01-30 08:05:31

标签: javascript node.js passport.js

我正在使用passport.js作为我的节点应用。在自定义回调部分,我找到了以下代码(比如代码A):

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

我的问题是我最后无法理解传球(req,res,next)。如何使用以下代码(比如说代码B):

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

代码B与代码A的不同之处是什么?
如果我简化代码A,那就像是:

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

进一步的 passport.authenticate(..)(req,res,next);
这意味着像 function(..)(req,res,next)
我的问题更多的是理解语法 功能(..)(参数)

1 个答案:

答案 0 :(得分:0)

authenticate()函数的结构如下:

module.exports = function authenticate(passport, name, options, callback) {
  // ...
  return function authenticate(req, res, next) {
      // ...
      strategy.success = function(user, info) {
        if (callback) {
          return callback(null, user, info);
        }
      }
     // ...
  })
};

因此需要两个系列参数:

  • 第一个(在您的情况下为'local'和回调函数)用于告知护照对您进行身份验证,以及如何执行此操作;
  • 第二个处理使用reqresnext参数控制您的应用的功能。

希望它能帮助你理解!