Я прочитал документацию по токенам обновления, но мне сложно наложить их на мой код.Google OAuth2 Обновить токен с помощью JavaScript
Я думаю, что правильный подход заключается в том, что 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();
};
Соответствующий Угловая 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 истекает через час, то Аякс потерпит неудачу.
На http://myserver/api/application.php я проверяю маркер, содержащийся в заголовке запроса с:
https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=" . $id_token;
Если клиент перезагружает страницу, все работает нормально, как Google автоматически выбирает новый id_token.