![](/img/trans.png)
[英]Github personal access token not working in api request call in nodeJS
[英]Using the returned token to access github api
我在我的应用程序中使用了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_token
来验证其用户,该回调中的令牌与此access_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...)
我出现黑屏,表示没有反应。
好吧,作为SO中的一个答案指出:
请注意,Passport不会主动使用访问令牌或刷新令牌,只能在登录期间获取用户配置文件。 当需要进行任何API请求时,您负责由应用程序使用这些令牌。 这样,您可以实现您描述的任何一种方法,过程中不涉及Passport。
access_tokens返回给您,但是之后不会处理,您是负责保存它或做任何您想做的人。
我的代码基本上是受Scotch.io使用护照的facebook auth中的教程的启发。 在那里,他们不需要每次登录都更新令牌,因为他们不需要在教程中,但是他们确实将令牌保存在数据库中,请检查其源代码。
在进行一些注释和调试的过程中,我发现这是我的应用程序中的罪魁祸首,因此我需要更新条件(指出是否已找到用户),更新令牌和一些值,以便一些重要信息在登录时仍然存在。
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帮助我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.