リフレッシュトークンに関するドキュメントを読んでいますが、コードに適用するのが困難です。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を取り出して、すべてが正常に動作します。