2015-05-27 5 views
2

Я реализую бэкэнд, который взаимодействует с Facebook, используя API OAuth. Во-первых, я обменять код авторизации для маркера доступа:Facebook OAuth в Node.JS: сохранение токена доступа

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) { 
    ... 
}); 

мне понадобится этот маркер доступа для удобства запросов к API Facebook (запрашивающего информацию о профиле, размещение на временную шкалу и т.д.), так что мне нужно храните его где-нибудь на стороне сервера. Могу ли я сделать это просто сделать это:

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, который использует это по умолчанию.

+0

'export' обычно является' module.exports', который кэшируется и делится по всему приложению, вам нужны сеансы и/или база данных, в которой хранятся пользователи и токены. – adeneo

+0

Было бы целесообразным использовать второй вариант, используя токены JSON? Я только что проверил это и, похоже, работает, но я не уверен, что это правильный путь. –

ответ

2

Почему вы не используете модуль passport с расширением passport-facebook?

См

Я не понимаю я также использовать JSON веб-маркеры ... часть, потому что это не имеет ничего общего с Access Токен, который вы получите от Facebook.

+0

Используя токены JSON, я могу хранить токен доступа Facebook в пределах полезной нагрузки моего токена JSON и декодировать его всякий раз, когда мне это нужно для запроса (например, размещение на стене Facebook). Я использую этот NodeJS в сочетании с приложением AngularJS, поэтому я использую Satellizer, который использует эти токены. Но я не уверен, что это лучший способ пойти? –

+0

Если вы используете Satellizer, все, кажется, уже встроено в процесс Access Token/OAuth. Так почему вы сами это кодируете? – Tobi

+0

В примере сервера Sattelizer (https://github.com/sahat/satellizer/blob/master/examples/server/node/server.js) токен Facebook нигде не сохраняется. Сохраняется только локальный пользователь, и я заменил его токеном FB. В моем приложении я буду взаимодействовать с Facebook все время, как только у меня будет токен доступа. Но я не уверен, как справиться с этим. У токена Facebook, очевидно, есть срок годности, так разумно хранить его где-то совсем? Или я должен запросить новый при каждом взаимодействии с Facebook? –

Смежные вопросы