Ste*_*ung 24 javascript callback node.js express passport.js
我是node.js和express.js noob.这个问题可能看起来很傻,但我真的很困惑.
我正在尝试使用护照配置Local Strategry身份验证.如官方文档所示,我们可以通过以下代码来计算本地策略,
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);
});
}
));
Run Code Online (Sandbox Code Playgroud)
我的困惑是关于done回调函数.当官方文档显示此局部策略在路由处理程序中用作中间件时,无需为此done回调传递函数参数.
app.post('/login',
passport.authenticate('local'),
function(req, res) {
res.redirect('/');
});
Run Code Online (Sandbox Code Playgroud)
那么,done如果我们不提供函数参数,这个回调函数不会为null吗?如果没有,那done回调函数是什么以及在这个done回调函数中会发生什么过程?
Roy*_*loh 36
done是战略实施内部调用的方法.
然后,正如您所见,它将导航到其中一个success/ error/ fail方法(再次,通过实现.还有更多选项).每个选项可以调用的next,在你的代码片段,其中如下:
function(req, res) {
res.redirect('/');
});
Run Code Online (Sandbox Code Playgroud)
当success被调用时,它可以将用户连接请求或做其他事情,这取决于你的需求(它看起来为options您传递给passport.authenticate).如果你想确定何时next会被调用,你应该使用custom callback它,这会给你更多的灵活性.
我强烈建议您阅读来源.
现在已经是 2022 年了,我也有同样的问题。护照文档已得到改进,它在此处描述了该done方法(也称为cb): https: //www.passportjs.org/concepts/authentication/strategies/#verify-function。您需要在策略的验证函数中自己调用它。
验证函数在以下三种条件之一下产生:成功、失败或错误。
如果验证函数找到该凭证所属的用户,并且该凭证有效,它将使用身份验证用户调用回调:
Run Code Online (Sandbox Code Playgroud)return cb(null, user);如果凭证不属于已知用户,或者无效,则 verify 函数会使用 false 调用回调以指示身份验证失败:
Run Code Online (Sandbox Code Playgroud)return cb(null, false);如果发生错误,例如数据库不可用,则会以惯用的 Node.js 风格调用回调并显示错误:
Run Code Online (Sandbox Code Playgroud)return cb(err);
| 归档时间: |
|
| 查看次数: |
22900 次 |
| 最近记录: |