什么是 Passport Strategy 中的“完成”回调函数配置“使用”函数

Posted

技术标签:

【中文标题】什么是 Passport Strategy 中的“完成”回调函数配置“使用”函数【英文标题】:What is "done" callback function in Passport Strategy Configure "use" function 【发布时间】:2015-11-16 04:45:19 【问题描述】:

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

我正在尝试使用passport 配置Local Strategry 身份验证。如官方文档所示,我们可以通过以下代码来计算这个Local Strategy,

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

我对@9​​87654324@ 回调函数感到困惑。当官方文档显示此本地策略在路由处理程序中用作中间件时,无需为此done 回调传递函数参数。

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

那么,如果我们不提供函数参数,这个done 回调函数不是会为空吗?如果不是,那个done回调函数是什么,这个done回调函数会发生什么过程?

【问题讨论】:

【参考方案1】:

done 是一个方法called internally by the strategy implementation。

然后,如您所见,它会将您导航到 success / error / fail 方法之一(同样,通过实现。there are more options)。 这些选项中的每一个都可以calls 到next,在您的 sn-p 代码中如下:

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

success 被调用时,it can attach the user to the request 或做其他事情,这取决于你的需要(它会寻找你传递给passport.authenticateoptions)。如果您想确定何时调用next,则应使用custom callback,这为您提供了更大的灵活性。

我强烈建议您阅读源代码。

【讨论】:

感谢您的回答。几个小时后,我问了这个问题,我逐渐明白“完成”可能是通过护照在内部管理的。现在,当我看到你的答案时,我就明白了。 passportjs 文档需要重大改进

以上是关于什么是 Passport Strategy 中的“完成”回调函数配置“使用”函数的主要内容,如果未能解决你的问题,请参考以下文章

使用 passport-saml 注销:req.logout() 或 Strategy.logout(),或两者兼而有之?

Nodejs中的护照OAuth2Strategy是不是对访问令牌发出自动POST请求

将 CompoundJs 与 Passport 一起使用

NestJS jwt-passport 身份验证

NestJs Passport jwt 未知策略

Passport-auth0 访问 accessToken