Я строю систему, которую люди могут аутентифицировать, чтобы читать их gmail. У меня это работает отлично на моем сайте, используя OAuth2 в Python; в ответе от google я получаю access_token
, token_type
, expires_in
и (самое главное) refresh_token
.Как получить Google refresh_token в Javascript API?
Теперь я хочу получить то же самое в Javascript (для приложения, которое я создаю, используя Ionic). Поэтому я использую ngCordovaOauth для проверки подлинности с помощью следующего кода:
$cordovaOauth.google(
'xxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com',
['https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/gmail.readonly'],
{
'access_type': 'offline',
'approval_prompt': 'force'
}
)
.then(function(result){
console.log("Response object -> " + JSON.stringify(result));
}, function(error){
console.log('Error -> ' + error);
});
Как и ожидалось, это производит следующий экран на моем телефоне:
Но в JSON я получаю обратно нет refresh_token
:
{"access_token":"xxxx.xxxxxxxxxxxx","token_type":"Bearer","expires_in":"3599"}
кто-нибудь знает, почему я не получаю refesh_token
при использовании Javascr ipt api? Все советы приветствуются!
Благодарим вас за разъяснение. Так правильно ли я понимаю, что у меня нет способа получить refresh_token из моего Ionic/Angular-app? – kramer65
Хотя я мало знаю об Ионе, связь с сервером будет необходима для использования типа гранта авторизации, который приведет к выдаче токена обновления (если требуется). Таким образом, чистое решение JavaScript, работающее в браузере пользователя, не будет выполнено. –
Итак, вот моя новая идея: не используйте неявный тип гранта, чтобы я мог получить код авторизации в javascript. Затем я отправляю полученный код авторизации на свой сервер и использую свой сервер для получения токена доступа и токена обновления. Это имеет смысл для вас? – kramer65