什么是"完成" Passport策略中的回调函数配置"使用"函数

时间:2015-08-22 08:05:57

标签: javascript node.js express callback passport.js

我是node.js和express.js noob。这个问题可能看起来很愚蠢,但我真的很困惑。

我尝试使用Local Strategry配置passport身份验证。如官方文档所示,我们可以通过以下代码来计算本地策略,

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) { return done(null, false); }
      if (!user.verifyPassword(password)) { return done(null, false); }
      return done(null, user);
    });
  }
));

我的疑惑是关于done回调函数。当官方文档在路由处理程序中将此本地策略用作中间件时,无需为此done回调传递函数参数。

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

所以,如果我们不提供函数参数,那么这个done回调函数是否为空?如果不是,done回调函数是什么以及此done回调函数中将发生什么过程?

1 个答案:

答案 0 :(得分:34)

done是一种方法called internally by the strategy implementation

然后,正如您所见,它会导航到success / error / fail方法之一(再次,通过实现。there are more options)。 这些选项中的每一个都可以callsnext,您的代码段中的位置如下:

function(req, res) {
  res.redirect('/');
});

调用success时,it can attach the user to the request或做其他事情,具体取决于您的需求(它会查找您传递给options的{​​{1}})。如果您想确定何时调用passport.authenticate,则应使用custom callback,这样可以提供更大的灵活性。

我强烈建议您阅读来源。