9

管理者がアナリティクスアカウントへのアクセスを認証してオフラインで使用できるようにするアプリケーションを構築しています。私はフロントエンドにAPIを使用しようとすると保存されたリフレッシュトークンを使用して、更新されたアクセストークンを取得する方法

は今、それが次のエラーが返されます。

"Access Token Expired. There wan a general error : The OAuth 2.0 access token has expired, and a refresh token is not available. Refresh tokens are not returned for responses that were auto-approved." 

はここでこれまでのところ、このエラーを生成します私のコードです:

require_once "lib/google/Google_Client.php"; 
require_once "lib/google/contrib/Google_AnalyticsService.php"; 

$_analytics = new analytics(); 
$_googleClient = new Google_Client(); 
$_googleClient->setClientId($_analytics->gaClientId); 
$_googleClient->setClientSecret($_analytics->gaClientSecret); 
$_googleClient->setRedirectUri($_analytics->gaRedirectUri); 
$_googleClient->setScopes($_analytics->gaScope); 
$_googleClient->setAccessType($_analytics->gaAccessType); 

// Returns last access token from the database (this works) 
$_tokenArray['access_token'] = $_analytics->dbAccessToken($_agencyId); 
$_googleClient->setAccessToken(json_encode($_tokenArray)); 

if($_googleClient->isAccessTokenExpired()) { 
    // Don't think this is required for Analytics API V3 
    //$_googleClient->refreshToken($_analytics->dbRefreshToken($_agencyId)); 
    echo 'Access Token Expired'; // Debug 
} 

if (!$_googleClient->getAccessToken()) { 
    echo '<h2>Error - Admin has not setup analytics correct yet</h2>'; 
} 

私は後ですsetRefreshTokenのようなものを実行する関数 - 以前にオンラインで認証した管理者からデータベースから値を入力する。

答えて

7

次のようにすると、データベースに新しいトークンを格納するコードを追加する必要があります。

if($_googleClient->isAccessTokenExpired()) { 
    // Don't think this is required for Analytics API V3 
    //$_googleClient->refreshToken($_analytics->dbRefreshToken($_agencyId)); 
    echo 'Access Token Expired'; // Debug 

    $_googleClient->authenticate(); 
    $NewAccessToken = json_decode($_googleClient->getAccessToken()); 
    $_googleClient->refreshToken($NewAccessToken->refresh_token); 
} 
+1

これは、リフレッシュトークンをパラメータとして使用するのではなく、 #fail - ありがとう! – mattpark22

+1

新しいトークンを取得するためにリフレッシュトークン機能を使用してテストするためにアクセストークンを期限切れにする方法を知っていますか? @mpark – Anagio

+1

@Anagioあなたは '$ _googleClient-> refreshToken($ NewAccessToken-> refresh_token);' を実行して、新しいトークンを強制することができます。次に、古いトークンと新しいトークンを比較して、変更されているかどうかを確認します。 –

0

try/catchを使用し、キャッチを使用してアクセストークンのリダイレクト/リフレッシュを行います。 以下は、私は同様の問題のために使用される溶液である:あなたが行が例外をスローして試してみるの下の文を置き換えることができます

$plus = new Google_Service_Plus($client); 
try { 
$me = $plus->people->get('me'); 
} catch(Exception $e){ 
     if(!(strpos($_SERVER["REQUEST_URI"],'logout'))){ 
     if (isset($authUrl)){ 
       $redirect = $authUrl; 
     } 
     else{ 
        $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'] .'?logout'; 
     } 
     header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); 
     exit; 
} 

が、私はそれが

$_googleClient->setClientId($_analytics->gaClientId); 

だろうと思います。また、もさわやか試すことができますソリューションごとなどのトークンは、ここに与えられた:

それを修正し、プラス私がアクセスtを使用してトークンをリフレッシュしようとしていた

https://stackoverflow.com/a/22096740/1675384

関連する問題