我想帮助理解passport.js authenticate documentation中的以下示例:
app.get('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/login'); }
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.redirect('/users/' + user.username);
});
})(req, res, next); //***UNSURE ABOUT THIS***
});
我理解代码的作用 - 但我不知道回调函数末尾的(req, res, next)
是什么。为什么有必要?它是否提供(err, user, info)
的值?如果是这样的话,为什么我看不到更多以参数结尾的函数调用 - 这可能与传递next
对象有关吗?
会爱一个人来帮助我提高对这个概念的理解。
答案 0 :(得分:2)
请求处理程序是Express中间件;他们得到一个请求,一个响应,以及一种将执行传递给下一层中间件的方法。 passport.authenticate
返回中间件,但尚未附加app.use()
,因此您必须手动传递相应的参数。
来自passport.authenticate
的回调也有三个参数的事实只是巧合。它们没有相同的值。