Loopback паспорт мобильный логин

Я разрабатываю API с петлей и паспортом. Я видел этот пример, который довольно хорош:

https://github.com/strongloop/loopback-example-passport

в документации они говорят, что loopback следует этому шагу для аутентификации пользователей через сторонних поставщиков:

  1. посетитель просит войти в систему с помощью Facebook, нажав на ссылку или кнопка с поддержкой LoopBack для запуска oAuth 2.0 разрешение.
  2. LoopBack перенаправляет браузер на конечную точку авторизации Facebook таким образом, пользователь может войти в Facebook и предоставить разрешения на LoopBack
  3. Facebook перенаправляет браузер на URL обратного вызова, размещенный LoopBack с кодом авторизации OAuth 2.0
  4. LoopBack делает запрос на конечную точку токена Facebook, чтобы получить маркер доступа с использованием кода авторизации
  5. LoopBack использует маркер доступа для извлечения пользователя Фейсбук профиль
  6. петлевой поиски модели Удостоверение_пользователя исполнителя (поставщика, externalId) чтобы увидеть, что есть существующий пользователь LoopBack для данного идентификатора Facebook Если да, установите для пользователя LoopBack текущий контекст Если нет, создайте пользователя LoopBack из профиля и создайте соответствующую запись в UserIdentity для отслеживания входа стороннего пользователя. Установите для вновь созданного пользователя текущий контекст.

Итак, мой вопрос: предположим, что какой-то пользователь получает маркер доступа, используя мобильное приложение, как я могу аутентифицировать запросы этого пользователя с помощью Loopback Passport?

спасибо

2 ответов


Я открыл аналогичную тему по тому же вопросу,как интегрировать сторонний логин loopback для android. Затем нашли решение для этого.

прежде всего, важно сказать, что пользователь loopback может иметь больше токенов доступа в то же время. При входе с веб-сайта или мобильного приложения loopback каждый раз создает маркер доступа.

если вы спрашиваете о том, чтобы получить токен доступа, есть уже способ сделать это, так что вы можете получить маркеры доступа, используя такой метод входа

User.login({username: 'foo', password: 'bar'}, function(err, accessToken) {
   console.log(accessToken);
});

единственное, что вам нужно сделать, это вызвать этот размещенный метод из вашего приложения android. Вы можете использовать loopback Android sdk (правильный способ) или отправлять имя пользователя и пароль на сервер и обрабатывать, просто так

app.post('/android/custom_login', function(req, res){
    var username = req.body.username;
    var password = req.body.password;

    User.login({username: username , password: password }, function(err, accessToken) {
      console.log(accessToken);
      return res.send(accessToken);
    });
});

если вы спрашиваете, чтобы войти в систему пользователей с учетной записью социальной сети, а затем получить токен доступа, Я могу смоделировать несколько вещей из сценария google. Также вы можете проверьте extra тест замыкания на GitHub

app.post('/android/custom_login', function(req, res){
   var provider = 'google';
   var authSchema = 'oAuth 2.0';

   // oneTimeCode from android
   var oneTimeCode = req.body.oneTimeCode;

   // Make a request to google api
   // to exchange refreshToken and accessToken with using google apis
   var accessToken = 'FROM GOOGLE API';
   var refreshToken = 'FROM GOOGLE API';

   // external id is your google or facebook user id
   var externalId = 'FROM GOOGLE API';
   var email = 'FROM GOOGLE API';

   var credentials = {};
   credentials.externalId = externalId;
   credentials.refreshToken = refreshToken;

   var profile = {};
   profile.id = externalId;
   profile.emails = [{type:'account', value: email}];

   UserIdentityModel.login(
     provider, authSchema, profile, credentials , 
     {autoLogin:true}, function(err, loopbackUser, identity, token){
            if(err) throw err;
            // token is access token for thig login
            return res.send(token);
   });
});

в сценарии google я получаю одноразовый код, когда пользователь нажал кнопку входа в систему. Затем отправил одноразовый код на мой сервер для обмена с токеном доступа и токеном обновления. Также здесь я получаю информацию о профиле пользователя от google.

профиль и провайдер, действительно важны, потому что UserIdentityModel.login () метод создает анонимный пользователь с использованием провайдера и профиля.id (если эти инфы не существуют)

В конце концов, у вас будет маркер доступа для android-приложения, как вы видите


  1. использовать Loopback-пример паспорта
  2. С сервера.Яш, замените код следующим образом

    app.get('/auth/account', ensureLoggedIn('/login'), function (req, res, next) {
        res.json(req.accessToken);
    
        });
    
  3. используя accessToken сверху, вы можете использовать API LoopBack.Можно расширить код для создания собственных пользовательских API.