我正在使用OAuth API实现与Facebook交互的后端。首先,我交换访问令牌的授权码:
var accessTokenUrl = 'https://graph.facebook.com/v2.3/oauth/access_token';
var params = {
code: req.body.code,
client_id: req.body.clientId,
client_secret: config.FACEBOOK_SECRET,
redirect_uri: req.body.redirectUri
};
request.get({
url: accessTokenUrl,
qs: params,
json: true
}, function(err, response, accessToken) {
...
});
我需要访问令牌来获取Facebook API的功能请求(请求个人资料信息,发布到时间线等),所以我需要将它存储在服务器端的某个地方。我可以这样做:
exports.access_token = access_token;
换句话说,对于与Node.JS的每个连接,exports.access_token是唯一的,还是所有客户共享的这个变量(在这种情况下我绝对不能这样做)?
我也使用JSON网络令牌,所以我也可以在请求令牌后执行此操作:
function createToken(accessToken) {
var payload = {
sub: accessToken,
iat: moment().unix(),
exp: moment().add(14, 'days').unix()
};
return jwt.encode(payload, config.TOKEN_SECRET);
}
对于使用令牌进行功能请求,我可以这样做:
var token = req.headers.authorization.split(' ')[1];
var payload = jwt.decode(token, config.TOKEN_SECRET);
var accessToken = payload.sub;
或者这也不可取?我之所以使用JSON网络令牌,是因为我使用的是Satellizer,它使用的是默认设置。
答案 0 :(得分:2)
为什么不将passport
模块与passport-facebook
扩展名一起使用?
见
我不明白我也使用JSON网络令牌...... 部分,因为这与您将从Facebook收到的访问令牌无关。