Ответ 1
Я открыл аналогичную тему о той же проблеме, Как интегрировать сторонний логин для андроида. Тогда нашел решение для этого.
Прежде всего, важно сказать, что пользователь 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. Кроме того, вы можете проверить дополнительные loopback github test
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() создает анонимного пользователя с использованием поставщика и profile.id(если эти сведения не существуют)
В конце концов у вас будет токен доступа для приложения для Android, как вы видите