2016-12-28 7 views
0

リフレッシュトークンに関するドキュメントを読んでいますが、コードに適用するのが困難です。Google OAuth2 JavaScriptを使用したリフレッシュトークン

PHPがリフレッシュトークンを生成し、それをクライアントに送信し、クライアントがid_tokenの使用をやめ、リフレッシュトークンだけを要求するという正しいアプローチだと思いますか?しかし、これはトークンの有効期限の目的を破るように思えます。私はGoogleが持つアカウントの認証にhttps://apis.google.com/js/platform.jsを使用してい

<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が1時間後に期限切れになると、ajaxは失敗します。私はリクエストのヘッダに提供するトークンをチェックしています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 }, 

へ:

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

それは現在のトークンを送信しますこの方法です。トークンがバックグラウンドで自動的にリフレッシュされることはわかりませんでした。毎回元のトークンを送信していたので、期限切れになるとアプリケーションは失敗します。

関連する問題