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

Facebook OAuth in Node.JS: storing the access token

我正在使用 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;

换句话说,exports.access_token 是否对于与 Node.JS 的每个连接都是唯一的,或者这个变量是否由所有客户端共享(在这种情况下我绝对不能这样做)?

我也使用 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,它默认使用它。

为什么不使用带有 passport-facebook 扩展名的 passport 模块?

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