Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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
Node.js 使用返回的令牌访问github api_Node.js_Express_Passport.js_Github Api - Fatal编程技术网

Node.js 使用返回的令牌访问github api

Node.js 使用返回的令牌访问github api,node.js,express,passport.js,github-api,Node.js,Express,Passport.js,Github Api,我使用passportjs和passport github在我的应用程序中创建社交登录 passport.use(new GithubStrategy( { clientID : configAuth.githubAuth.clientID, clientSecret : configAuth.githubAuth.clientSecret, callbackURL : configAuth.githubAuth.callbackURL }, fun

我使用passportjs和passport github在我的应用程序中创建社交登录

passport.use(new GithubStrategy(
  {
    clientID     : configAuth.githubAuth.clientID,
    clientSecret : configAuth.githubAuth.clientSecret,
    callbackURL  : configAuth.githubAuth.callbackURL
  },
  function(token, refreshToken, profile, done) {
    process.nextTick(function() {
      User.findOne({'github.id' : profile.id}, function(err, user) {
        if (err) {
          return done(err);
        }
        if (user) {
          return done(null, user);
        } else {
          var newUser = new User();
          newUser.github.id = profile.id,
          newUser.token     = token,
          newUser.name      = profile.displayName;
          newUser.email     = profile.emails[0].value;
          newUser.username  = profile.username;
          // save
          newUser.save(function(err){
            if (err) {
              throw err;
            }

            return done(null, newUser);
          });
        }
      });
    });
  }
));
现在,我正在使用另一个名为octonode的组件,它需要一个
access\u token
来验证其用户,回调中的token是否与此access\u token相同,因为我在执行此操作时似乎没有经过验证:

var github = require('octonode');

exports.read = function (req, res, next) {

  var client = github.client();
  client.get('/user?access_token=' + req.user.token, {}, function (err, status, body, headers) {
    res.json(body);
  });
};
var client = github.client(req.user.token);
client.get('/user',{}, function...)
并尝试这样做:

var github = require('octonode');

exports.read = function (req, res, next) {

  var client = github.client();
  client.get('/user?access_token=' + req.user.token, {}, function (err, status, body, headers) {
    res.json(body);
  });
};
var client = github.client(req.user.token);
client.get('/user',{}, function...)

我得到一个空白屏幕,意味着没有响应。

好的,作为SO中的一个答案,它表示:

请注意,Passport不主动使用访问令牌或刷新令牌,只是在登录期间获取用户配置文件。您的应用程序负责在发出任何必要的API请求时使用这些令牌。因此,您可以实现您描述的任何一种方法,Passport不参与该过程

access_令牌会返回给您,但在您负责保存它或执行任何您想要的操作之后,它不会处理它

我的代码基本上是受Scotch.io的FacebookAuthUsingPassport教程的启发。在那里,他们不会在每次登录时更新令牌,因为他们不需要在教程中更新令牌,但他们会将令牌保存在数据库中,检查他们的

通过一些注释和调试,我发现这是我的应用程序中的罪魁祸首,因此我需要更新状态,说明是否找到用户,更新令牌和一些值,以便在登录时保留一些重要信息

if (user) {
   user.token = token;
   user.name  = profile.displayName;
   user.email = profile.emails[0].value;
   user.save();
   return done(null, user);
}
现在这一切都很顺利:

var client = github.client(req.user.token);
client.get('/user', {}, function (err, status, body, headers) {
    res.json(body);
});

感谢@MikeSmithDev对我的帮助。

好的,作为SO中的一个答案:

请注意,Passport不主动使用访问令牌或刷新令牌,只是在登录期间获取用户配置文件。您的应用程序负责在发出任何必要的API请求时使用这些令牌。因此,您可以实现您描述的任何一种方法,Passport不参与该过程

access_令牌会返回给您,但在您负责保存它或执行任何您想要的操作之后,它不会处理它

我的代码基本上是受Scotch.io的FacebookAuthUsingPassport教程的启发。在那里,他们不会在每次登录时更新令牌,因为他们不需要在教程中更新令牌,但他们会将令牌保存在数据库中,检查他们的

通过一些注释和调试,我发现这是我的应用程序中的罪魁祸首,因此我需要更新状态,说明是否找到用户,更新令牌和一些值,以便在登录时保留一些重要信息

if (user) {
   user.token = token;
   user.name  = profile.displayName;
   user.email = profile.emails[0].value;
   user.save();
   return done(null, user);
}
现在这一切都很顺利:

var client = github.client(req.user.token);
client.get('/user', {}, function (err, status, body, headers) {
    res.json(body);
});

感谢@MikeSmithDev帮助我。

您已经验证了
req.user.token
实际上返回了令牌值?是的,它实际上返回了一个值,一些jibberish散列。我想,req.user.token与github返回的令牌不同。您能验证这一点吗?在如何存储/访问令牌方面,我采取了不同的方法,但您保存的令牌看起来是正确的。事实上,我通常会更新大多数属性,以获取用户所做的任何更新。并且您已经验证了
req.user.token
实际上返回了令牌值?是的,它实际上返回了一个值,一些jibberish散列。我猜req.user.token与github返回的token不同。您能验证一下吗?在如何存储/访问令牌方面,我采取了不同的方法,但您保存的令牌看起来是正确的。事实上,我通常会更新大多数属性,以获取用户所做的任何更新。