Я потратил пару дней на этой неделе, пытаясь выяснить, как лучше всего использовать аутентификацию Facebook для частного API, используя password.js - паспорт-facebook-token идеально подходит для этого.
Вы правы, предполагая, что это две отдельные стратегии аутентификации. Вам не нужно устанавливать паспорт-facebook, чтобы использовать паспорт-facebook-токен.
Если у вас есть аутентификация Facebook, реализованная в клиентском JS (или iOS и т. Д.), И вы ищете способ затем аутентифицировать запросы API с помощью вашего пользовательского Facebook authToken, паспорт-facebook-токен - действительно элегантное решение.
Passport-facebook-token работает полностью независимо от паспорта-facebook и в основном обрабатывает перенаправления, требуемые Facebook, перед передачей запроса вашему контроллеру.
Итак, чтобы аутентифицировать маршрут API с помощью паспорта-facebook-токена, вам необходимо настроить стратегию паспорта следующим образом:
passport.use('facebook-token', new FacebookTokenStrategy({
clientID : "123-your-app-id",
clientSecret : "ssshhhhhhhhh"
},
function(accessToken, refreshToken, profile, done) {
// console.log(profile);
var user = {
'email': profile.emails[0].value,
'name' : profile.name.givenName + ' ' + profile.name.familyName,
'id' : profile.id,
'token': accessToken
}
// You can perform any necessary actions with your user at this point,
// e.g. internal verification against a users table,
// creating new user entries, etc.
return done(null, user); // the user object we just made gets passed to the route's controller as `req.user`
}
));
Стоит отметить, что метод User.findOrCreate
, используемый в файле Readme паспорт-фейсбук-токен, не является методом mongo / mongoose по умолчанию, а является плагином, который вам придется установить, если вы этого хотите.
Чтобы использовать эту стратегию аутентификации в качестве промежуточного программного обеспечения для любого из ваших маршрутов, вам необходимо передать ему объект access_token
либо как параметр URL-адреса, либо как свойство тела запроса.
app.get('/my/api/:access_token/endpoint',
passport.authenticate(['facebook-token','other-strategies']),
function (req, res) {
if (req.user){
//you're authenticated! return sensitive secret information here.
res.send(200, {'secrets':['array','of','top','secret','information']});
} else {
// not authenticated. go away.
res.send(401)
}
}
NB. свойство access_token
чувствительно к регистру и использует подчеркивание. Документация для паспорта-фейсбука-токена не обширна, но источник действительно хорошо прокомментирован и довольно легко читается, поэтому я бы посоветовал вам заглянуть туда под капотом. Это, безусловно, помогло мне осмыслить некоторые более общие способы работы паспорта.
person
Community
schedule
29.06.2014