Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Passport自定义回调如何工作?_Javascript_Node.js_Express_Passport.js - Fatal编程技术网

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
函数中没有代码被执行。我希望看到一个样板,其中包含一个使用本地策略和自定义回调的工作示例。