2016-09-05 11 views
1

初めてログインするときにうまく動作するこのコードはありますが、ページを開いたままにしてそのセッションからログアウトしないと、次のメッセージが表示され、ブラウザを再起動する必要があります私のページをもう一度得る。トークンを自動的に更新するにはどうすればよいですか?Google OAuth Token Expires

Fatal error: Uncaught exception 'Google_Auth_Exception' with message '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.'...

これは、あなたがエラー 'Google_Auth_Exception' をキャプチャし、新しいトークンを生成can'tコード

<?php 

require_once __DIR__.'/gplus-lib/vendor/autoload.php'; 

const CLIENT_ID = 'CLIENT_ID'; 
const CLIENT_SECRET = 'CLIENT_SECRET'; 
const REDIRECT_URI = 'REDIRECT_URI'; 

session_start(); 

$client = new Google_Client(); 
$client->setClientId(CLIENT_ID); 
$client->setClientSecret(CLIENT_SECRET); 
$client->setRedirectUri(REDIRECT_URI); 
$client->setScopes('email'); 

$plus = new Google_Service_Plus($client); 

if (isset($_REQUEST['logout'])) { 
    session_unset(); 
} 

if (isset($_GET['code'])) { 
    $client->authenticate($_GET['code']); 
    $_SESSION['access_token'] = $client->getAccessToken(); 
    $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; 
    header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); 
} 

if (isset($_SESSION['access_token']) && $_SESSION['access_token']) { 
    $client->setAccessToken($_SESSION['access_token']); 
    $me = $plus->people->get('me'); 

    // Get User data 
    $id = $me['id']; 
    $name = $me['displayName']; 
    $email = $me['emails'][0]['value']; 
    $profile_image_url = $me['image']['url']; 

} else { 
    // get the login url 
    $authUrl = $client->createAuthUrl(); 
} 

?> 
<div> 
if (isset($authUrl)) { 
    echo "<a class='login' href='" . $authUrl . "'><img src='gplus-lib/signin_button.png' height='50px'/></a>"; 
} else { ?> 

<!-- Some HTML --> 

<?php 
} 
?> 
</div> 

答えて

0

のですか?

ログインする前にService and Googleにそのトークンを呼び出すテストがある場合は、このトークンが期限切れかどうかを知ることができ、呼び出しが失敗した場合は新しいトークンを生成できます。

0

これは認証コードフローです。 authCodeを要求する際には、Offline_Accessの請求を要求する必要があります。

このクレームでは、アクセストークンとともにリフレッシュトークンを取得します。このリフレッシュトークンは、アクセストークンの有効期限が切れるたびに新しいトークンを取得するために使用できます。

あなたがリフレッシュトークンを提供する別のスコープを求める必要があるので、auth_Codeを要求している場所があります。

テスト用には、Postmanアプリを使用できます。それは、あなたが異なるスコープを求めるときにどのような情報が受け取られているかについてのいくつかの考えを与えるでしょう。