Подтвердить что ты не робот

Passport.js: стратегия паспорт-facebook-token, вход в паспорт JS SDK и THEN?

Я искал способ разрешить автору моего клиента с помощью JS SDK facebook, а затем каким-то образом передать это разрешение на мой сервер node (чтобы он мог проверять запросы с помощью графика fb api)

Я споткнулся: https://github.com/jaredhanson/passport-facebook/issues/26

&

https://github.com/drudge/passport-facebook-token

что представляет собой совершенно другую стратегию из паспорт-facebook.

Правильно ли я полагаю, что:

Вход в систему с помощью fb JS SDK, а затем стратегия facebook-token каким-то образом извлекает идентификатор токена и fb из документа или объекта body?

Или есть ли другой достойный способ достичь этого? Я стараюсь избегать перенаправления, выполняемого SDK сервера.

4b9b3361

Ответ 1

Я потратил пару дней на этой неделе, пытаясь выяснить, как использовать аутентификацию Facebook для частного API, используя паспорт .js - паспорт-facebook-токен идеально подходит для этого.

Вы считаете, что это две разные стратегии аутентификации. Для использования паспорт-facebook-токена вам не требуется паспорт-facebook.

Если у вас установлена ​​аутентификация Facebook на стороне клиента JS (или iOS и т.д.), и вы ищете способ аутентификации запросов API с помощью вашего пользователя Facebook authToken, паспорт-facebook-токен - действительно изящное решение.

паспорт-facebook-токен работает полностью независимо от паспорт-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 controller as `req.user`
  }
));

Стоит отметить, что метод User.findOrCreate, используемый в файле Readme паспорта-facebook-read, не является стандартным методом 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 чувствительно к регистру и использует символ подчеркивания. Документация для паспорта-facebook-токена не является обширной, но источник действительно хорошо прокомментирован и довольно легко читается, поэтому я бы посоветовал вам взглянуть под капот. Это, безусловно, помогло мне окунуться в некоторые из более общих способов работы паспорта.