我是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
回调函数中将发生什么过程?
答案 0 :(得分:34)
done
是一种方法called internally by the strategy implementation。
然后,正如您所见,它会导航到success
/ error
/ fail
方法之一(再次,通过实现。there are more options)。
这些选项中的每一个都可以calls到next
,您的代码段中的位置如下:
function(req, res) {
res.redirect('/');
});
调用success
时,it can attach the user to the request或做其他事情,具体取决于您的需求(它会查找您传递给options
的{{1}})。如果您想确定何时调用passport.authenticate
,则应使用custom callback
,这样可以提供更大的灵活性。
我强烈建议您阅读来源。