2016-12-28 3 views
0

Я прочитал документацию по токенам обновления, но мне сложно наложить их на мой код.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.

ответ

0

Я неправильно использовал токен.

Я изменил:

headers: { "Content-Type": "application/x-www-form-urlencoded", "id_token": id_token }, 

To:

headers: { "Content-Type": "application/x-www-form-urlencoded", "id_token": gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().id_token }, 

Таким образом, он посылает текущий маркер. Я не понял, что токен автоматически обновляется в фоновом режиме. Я отправлял оригинальный токен каждый раз, поэтому, как только он истек, приложение завершится неудачей.

Смежные вопросы