Я прочитал документацию по токенам обновления, но мне трудно применить их к моему коду.
Я думаю, что правильный подход заключается в том, что php генерирует токен обновления, отправляет его клиенту, затем клиент перестает использовать id_token и делает запросы только с токеном обновления? Но похоже, что это просто побеждает цель истечения срока действия токена.
Как мне справиться с истечением срока действия токена и использовать токен обновления в этом сценарии:
Я использую https://apis.google.com/js/platform.js для аутентификации учетных записей Google с помощью:
<div class="g-signin2" data-onsuccess="onSignIn"></div>
Затем с помощью onSignIn, используя ajax для получения некоторых данных с сервера после входа в систему с проверкой id_token на внутреннем сервере с помощью php:
function onSignIn(googleUser) {
var profile = googleUser.getBasicProfile();
id_token = googleUser.getAuthResponse().id_token;
angular.element(document.getElementById('data_controller')).scope().get_data();
};
Соответствующий Angular JavaScript:
angular.module('myApp', ['ngDialog']);
angular.module('myApp').controller('data_controller', function($scope, $q, $http, ngDialog) {
$scope.get_data = function() {
$http({
headers: { "Content-Type": "application/x-www-form-urlencoded", "id_token": id_token },
url: "http://myserver/api/application.php",
method: "POST",
data: {}
})
.then(function successCallback(response) {
$scope.my_data = response.data.results;
$scope.token_used = id_token;
console.log(response.data);
});
}
});
Это работает нормально, но как только срок действия id_token истечет через час, ajax завершится ошибкой.
На http://myserver/api/application.php я проверяю токен, указанный в заголовке запрос с:
https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=" . $id_token;
Если клиент перезагружает страницу, все работает нормально, поскольку Google автоматически извлекает новый id_token.