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


33 ов принято

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

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

Если у вас установлена ??аутентификация Facebook на стороне клиента JS (или iOS и т. Д.), И вы ищете способ аутентификации запросов API с использованием аутентификации Facebook вашего пользователя, то паспорт-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's controller as `req.user`
  }
));

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

Node.js, facebook-на JavaScript SDK, passport.js, facebook-OAuth, паспорт-facebook,

node.js,facebook-javascript-sdk,passport.js,facebook-oauth,passport-facebook,

19

Ответов: 1


33 ов принято

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

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

Если у вас установлена ??аутентификация Facebook на стороне клиента JS (или iOS и т. Д.), И вы ищете способ аутентификации запросов API с использованием аутентификации Facebook вашего пользователя, то паспорт-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's controller as `req.user`
  }
));

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

Node.js, facebook-на JavaScript SDK, passport.js, facebook-OAuth, паспорт-facebook,
Похожие вопросы