Node.js Passport因404失败-GitHub的InternalOAuthError为什么?

Node.js Passport因404失败-GitHub的InternalOAuthError为什么?,node.js,express,github,passport.js,Node.js,Express,Github,Passport.js,我有谷歌和Facebook的passport。我已尝试添加Github以添加这些凭据,以便可以执行已验证的Github API调用。因此,我简单地添加了使用谷歌或Facebook凭据登录时使用的相同模式 但是我在GITHUB发生了AUTH回调之后,在代码的中间看到了IntualAuthor。这发生在几乎最后一行:“returndone(null,user.userData);”被称为。尝试调试会干扰回调。所以我希望有人能更清楚地解释一下我的护照有什么错 真正奇怪的是,我已经从github收到了用

我有谷歌和Facebook的passport。我已尝试添加Github以添加这些凭据,以便可以执行已验证的Github API调用。因此,我简单地添加了使用谷歌或Facebook凭据登录时使用的相同模式

<>但是我在GITHUB发生了AUTH回调之后,在代码的中间看到了IntualAuthor。这发生在几乎最后一行:“returndone(null,user.userData);”被称为。尝试调试会干扰回调。所以我希望有人能更清楚地解释一下我的护照有什么错

真正奇怪的是,我已经从github收到了用户配置文件,并以“user.update(db)”的形式存储在我的数据库中,就像我使用google一样。然后,当我试图通过调用done(…)返回时,就会发生崩溃

我需要在github上为我的个人资料添加一些内容吗?还是别的什么? 或者这是因为我早就使用passport使用Google凭据登录了。请注意,对于Google或Facebook,我指定了session:false。我已尝试使用“passport-github”和“passport-github2”进行此操作

清晰的代码是:

index.js

var express = require('express');
var passport = require('passport');
var auth = require('../auth.service');

var router = express.Router();

router
  .get('/:user', passport.authenticate('github', {
    failureRedirect: '/signup',
    session: false
  }))

  .get('/callback', passport.authenticate('github', {
    failureRedirect: '/signup',
    session: true
  }), auth.setTokenCookie);

module.exports = router;
以及相应的passport.js

var passport = require('passport');
var GitHubStrategy = require('passport-github2').Strategy;
var monk_db = rekuire('server/monk_db');
var loggingAndErrors = rekuire('./loggingAndErrors');
var auth = require('../auth.service');
var config = require('../../config/environment');
var jwt = require('jsonwebtoken');
var expressJwt = require('express-jwt');
var validateJwt = expressJwt({ secret: config.secrets.session });
var jwtDecode = require('jwt-decode');
var ObjectID = require("bson-objectid");

exports.setup = function (User, config) {
  passport.use(new GitHubStrategy({
      clientID: config.github.clientID,
      clientSecret: config.github.clientSecret,
      callbackURL: config.github.callbackURL,
      passReqToCallback: true
    },
    function(req, accessToken, refreshToken, profile, done) {
      //loggingAndErrors.logger.log(accessToken);
      var token = req.cookies.token;
      var decoded = jwtDecode(token);
      var user_id = decoded._id;
      var db = monk_db.getDb();
      var users = User.getUsers(db);
      users.findById(ObjectID(user_id), function(err, user) {
        if (err) {
          loggingAndErrors.loggerError.log(err);
          return done(err);
        }
        //loggingAndErrors.logger.log(profile);
        user.github=profile._json
        user = User.newUser(user);
        user.update(db).onResolve(function(err, result) {
          if (err) {
            loggingAndErrors.loggerError.log(err);
            return done(err);
          }
          //loggingAndErrors.logger.log(user);
          loggingAndErrors.logger.log("calling done(err, user) for user_id:", user.userData._id);
          return done(null, user.userData);
        });
      });
    }
  ));
};
坠机原因是:

{ statusCode: 404,
data: '{"message":"Not\
Found","documentation_url":"https://developer.github.com/v3"}' }
GET /auth/github/callback?code=7c0c6dff81cdd9417301 500 945.444 ms - 674
InternalOAuthError: Failed to fetch user profile
at /home/joel/workspace/Tracker2/node_modules/passport-github2/lib/strategy.js:118:21
at passBackControl (/home/joel/workspace/Tracker2/node_modules/passport-github2/node_modules/passport-oauth2/node_modules/oauth/lib/oauth2.js:123:9)
at IncomingMessage.<anonymous> (/home/joel/workspace/Tracker2/node_modules/passport-github2/node_modules/passport-oauth2/node_modules/oauth/lib/oauth2.js:142:7)
at IncomingMessage.emit (events.js:129:20)
at _stream_readable.js:908:16
at process._tickDomainCallback (node.js:381:11)
{statusCode:404,
数据:“{”消息“:“不是”\
找到“文档\ url”:https://developer.github.com/v3"}' }
GET/auth/github/callback?代码=7c0c6dff81cd9417301 500 945.444 ms-674
InternalOAuthError:无法获取用户配置文件
at/home/joel/workspace/Tracker2/node_modules/passport-github2/lib/strategy.js:118:21
在passBackControl(/home/joel/workspace/Tracker2/node_modules/passport-github2/node_modules/passport-oauth2/node_modules/oauth/lib/oauth2.js:123:9)
在收到消息时。(/home/joel/workspace/Tracker2/node_modules/passport-github2/node_modules/passport-oauth2/node_modules/oauth/lib/oauth2.js:142:7)
在IncomingMessage.emit(events.js:129:20)
at_stream_readable.js:908:16
在进程中。_tickDomainCallback(node.js:381:11)

我刚刚遇到了同样的问题,下面是我的解决方法

验证时使用并请求访问用户的电子邮件地址:

passport.authenticate('github', { scope: [ 'user:email' ] }));

中列出了您可能希望同时访问的其他权限。

非常感谢您的提示。这让我越过了这个障碍。但在允许访问之后,我发现它抛出:错误:未能将用户序列化到会话中。--也许这也与权限有关?我会调查,但如果这是错误的,请告知。刚刚意识到我需要添加:passport.serializeUser(函数(user,done){done(null,user);});反序列化用户(函数(user,done){done(null,user);});这解决了问题再次感谢。