2016-09-05 3 views
1

Ich habe diesen Code, der funktioniert, wenn ich mich das erste Mal anmelde, aber wenn die Seite offen gelassen wird und ich mich nicht aus dieser Sitzung abmelde, erhalte ich die folgende Meldung und ich muss meinen Browser neu starten um meine Seite wieder zu bekommen. Wie kann ich das Token automatisch aktualisieren lassen?Google OAuth Token läuft ab

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.'...

Dies ist der Code

<?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> 

Antwort

0

Sie kann nicht den Fehler erfassen 'Google_Auth_Exception' und neue Token generieren?

Wenn Ihre Tests einen Anruf bei Service tätigen und mit diesem Token vor der Anmeldung googlen, können Sie wissen, ob dieses Token abgelaufen ist oder nicht und ein neues Token generieren, wenn der Anruf fehlgeschlagen ist.

0

Dies ist der Autorisierungscode-Fluss. Während Sie den authCode anfordern, müssen Sie auch den Offline_Access Anspruch anfordern.

Mit diesem Anspruch erhalten Sie das Aktualisierungstoken zusammen mit dem Zugriffstoken. Dieses Aktualisierungstoken kann dann verwendet werden, um bei jedem Ablauf des Zugriffstokens ein neues Token zu erhalten.

So, wo Sie den auth_Code anfordern, müssen Sie nach einem anderen Bereich fragen, der Ihnen das Aktualisierungstoken zur Verfügung stellt.

Und zum Testen können Sie Postman App verwenden. Das gibt Ihnen eine Vorstellung davon, welche Informationen erhalten werden, wenn Sie nach anderen Bereichen fragen.