Node.js Passport OAuth2回调URL激发两次

Node.js Passport OAuth2回调URL激发两次,node.js,express,oauth-2.0,passport.js,Node.js,Express,Oauth 2.0,Passport.js,我正在使用Passport OAuth2对当前没有自定义Passport策略的API进行身份验证。我的问题似乎是,访问代码为/auth/moxtra/callback?code=的第一个GET请求挂起并且似乎从未解决,这会导致对同一URL的第二个GET请求触发。但此时,API已经使访问代码无效,这会导致服务器错误,因此用户永远不会被重定向回我的应用程序。以下是输出: GET /auth/moxtra/callback?code=v-cqK8ywP2I - - ms - - GET /auth/m

我正在使用Passport OAuth2对当前没有自定义Passport策略的API进行身份验证。我的问题似乎是,访问代码为
/auth/moxtra/callback?code=
的第一个GET请求挂起并且似乎从未解决,这会导致对同一URL的第二个GET请求触发。但此时,API已经使访问代码无效,这会导致服务器错误,因此用户永远不会被重定向回我的应用程序。以下是输出:

GET /auth/moxtra/callback?code=v-cqK8ywP2I - - ms - -
GET /auth/moxtra/callback?code=v-cqK8ywP2I 500 665.180 ms - 1231
有趣的是,我知道请求是有效的,因为我正在记录返回的响应;我正在查询的所需资源已成功返回。但是,500服务器错误会阻止重定向回我的应用程序

我不完全确定这是一个Passport错误,但我已经和管理API的后端人员谈过了,从他的测试来看,他不认为这是一个问题

如果有任何想法/反馈,我将不胜感激

编辑:下面是OAuth策略的代码:

passport.use('moxtra', new OAuthStrategy({
  authorizationURL: 'https://api.moxtra.com/oauth/authorize',
  tokenURL: 'https://api.moxtra.com/oauth/token',
  clientID: configAuth.moxtraAuth.clientID,
  clientSecret: configAuth.moxtraAuth.clientSecret,
  callbackURL: configAuth.moxtraAuth.callbackURL
},
function(accessToken, done) {
  console.log("Access token: ", accessToken);
  var url = 'https://api.moxtra.com/me?access_token=' + accessToken;
  request.get(url, function(err, response, body) {
    if (!err && response.statusCode == 200) {
      console.log("Response body: ", body);
    }
  });
}));
以下是路由中间件代码:

app.get('/auth/moxtra', passport.authenticate('moxtra'));

app.get('/auth/moxtra/callback', passport.authenticate('moxtra', {
  successRedirect : '/profile',
  failureRedirect : '/',
  failureFlash : true
}));

目前,我只是将访问令牌和响应主体记录到控制台。两人都成功返回。我不知道是什么原因导致第一个GET请求无法解决

您需要解决的第一个问题是为什么第一个请求永远无法解决。在您的身份验证过程中,尝试在每次异步操作之后放置console.log。您能给我们看一些代码吗?否则,我们将无法提供太多帮助。您不能在策略回调中调用
done
回调。在
请求中调用
完成
。获取
回调。