Node.js 使用返回的令牌访问github api
我使用passportjs和passport github在我的应用程序中创建社交登录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
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不参与该过程
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不参与该过程
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不同。您能验证一下吗?在如何存储/访问令牌方面,我采取了不同的方法,但您保存的令牌看起来是正确的。事实上,我通常会更新大多数属性,以获取用户所做的任何更新。