什么是 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);
);
));
我对@987654324@ 回调函数感到困惑。当官方文档显示此本地策略在路由处理程序中用作中间件时,无需为此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.authenticate
的options
)。如果您想确定何时调用next
,则应使用custom callback
,这为您提供了更大的灵活性。
我强烈建议您阅读源代码。
【讨论】:
感谢您的回答。几个小时后,我问了这个问题,我逐渐明白“完成”可能是通过护照在内部管理的。现在,当我看到你的答案时,我就明白了。 passportjs 文档需要重大改进以上是关于什么是 Passport Strategy 中的“完成”回调函数配置“使用”函数的主要内容,如果未能解决你的问题,请参考以下文章
使用 passport-saml 注销:req.logout() 或 Strategy.logout(),或两者兼而有之?