Loopback паспорт мобильный логин
Я разрабатываю API с петлей и паспортом. Я видел этот пример, который довольно хорош:
https://github.com/strongloop/loopback-example-passport
в документации они говорят, что loopback следует этому шагу для аутентификации пользователей через сторонних поставщиков:
- посетитель просит войти в систему с помощью Facebook, нажав на ссылку или кнопка с поддержкой LoopBack для запуска oAuth 2.0 разрешение.
- LoopBack перенаправляет браузер на конечную точку авторизации Facebook таким образом, пользователь может войти в Facebook и предоставить разрешения на LoopBack
- Facebook перенаправляет браузер на URL обратного вызова, размещенный LoopBack с кодом авторизации OAuth 2.0
- LoopBack делает запрос на конечную точку токена Facebook, чтобы получить маркер доступа с использованием кода авторизации
- LoopBack использует маркер доступа для извлечения пользователя Фейсбук профиль
- петлевой поиски модели Удостоверение_пользователя исполнителя (поставщика, 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-приложения, как вы видите
- использовать Loopback-пример паспорта
-
С сервера.Яш, замените код следующим образом
app.get('/auth/account', ensureLoggedIn('/login'), function (req, res, next) { res.json(req.accessToken); });
используя accessToken сверху, вы можете использовать API LoopBack.Можно расширить код для создания собственных пользовательских API.