Node.JS中的Facebook OAuth:存储访问令牌

时间:2015-05-27 07:06:02

标签: javascript json node.js facebook facebook-graph-api

我正在使用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,它使用的是默认设置。

1 个答案:

答案 0 :(得分:2)

为什么不将passport模块与passport-facebook扩展名一起使用?

我不明白我也使用JSON网络令牌...... 部分,因为这与您将从Facebook收到的访问令牌无关。