Javascript Passport自定义回调如何工作?
我不明白这个例子Javascript Passport自定义回调如何工作?,javascript,node.js,express,passport.js,Javascript,Node.js,Express,Passport.js,我不明白这个例子 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)
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);
});
我看到这里发生的是
app.get('path', function(req, res, next) {/*bunch of code*/})(req, res, next)
既然它不是对放在后面的函数(req、res、next)的引用,该如何工作 您的简化示例有点不对劲,可能是因为括号不匹配等原因 如果我减少自定义回调的“官方”passport示例,我会得到:
app.get('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
})(req, res, next);
});
因此,我的第一个假设是,(req,res,next)
正在被传递到从passport.authenticate
返回的符合express中间件的函数
如果我在第81行左右(在写这篇文章的时候)四处走动,看起来就像是从以下开始发生的事情:
return function authenticate(req, res, next) {
/* lots and lots of lines follow */
}
但是官方的自定义回调示例强调了在使用自定义回调时必须手动调用
req.login
。我仍然不清楚为什么会这样,因为当我测试它时,我的req.logIn
函数中没有代码被执行。我希望看到一个样板,其中包含一个使用本地策略和自定义回调的工作示例。