2017-01-12 8 views
1

Nachdem endlich etwas neben NULL für ein Zugriffstoken oder ein Refresh-Token zurückgegeben wurde, wird jetzt ein Fehler angezeigt, der besagt, dass mein Autorisierungstoken abgelaufen ist. Ich habe versucht, mit zwei verschiedenen Google-Konten zu verschiedenen Tageszeiten zu autorisieren, bekomme aber immer noch das gleiche Autorisierungs-Token.Google oauth Autorisierungscode abgelaufen?

Wie bekomme ich ein neues, gültiges Autorisierungs-Token? Wenn ich zu den Kontoeinstellungen gehe, um den Autorisierungszugriff für die von mir erstellte App zu entfernen, um sie zurückzusetzen, wird sie nicht als autorisierte App/Dienst aufgeführt.

Hier ist mein Code:

require_once 'vendor/autoload.php'; 
$redirect_uri = 'site url'; 
$client = new Google_Client(); 
$client->setAuthConfig('client_secrets.json'); 
$client->setRedirectUri($redirect_uri); 
$client->setAccessType('offline'); 
$client->setApprovalPrompt('force'); 
$client->authenticate($_GET['code']); 
$refreshToken = $client->getRefreshToken(); 
var_dump($refreshToken); 
$accessToken = $client->getAccessToken(); 
$aT = $client->fetchAccessTokenWithAuthCode($_GET['code']); 
var_dump($accessToken); 
var_dump($aT); 

Die letzte Zeile ist, was den Fehler zurückgibt. Die anderen var_dump s geben NULL zurück.

Antwort

0

Der Prozess, dem Sie für die Authentifizierung folgen, ist nicht der richtige, oder zumindest das, was er zu sein scheint. Nachdem Sie die Client-Konfiguration eingestellt haben, müssen Sie prüfen, ob Sie einen Zugriffscode haben. Wenn kein Zugriffscode vorhanden ist, leiten Sie den Benutzer zur Authentifizierung um und nachdem der Benutzer authentifiziert wurde, leiten Sie den Benutzer um, um das zu tun, was Sie wollen. Sie vermissen auch die Bereiche, die Ihre App benötigt, um den richtigen Zugriff zu erhalten. Löschen Sie Ihre App aus den connected apps and sites in Ihrem Google-Profil und dann versuchen, die folgenden bitte:

<?php session_start(); 

//INCLUDE PHP CLIENT LIBRARY 
require_once 'vendor/autoload.php'; 

$scopes = array("email"); 

// Create client object 
$client = new Google_Client(); 
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/index.php'); 
$client->setAuthConfig("client_secrets.json"); 
$client->addScope($scopes); 
$client->setAccessType('offline'); 
$client->setApprovalPrompt('force'); 

if (isset($_SESSION['access_token']) && $_SESSION["access_token"]){ 


    $client->setAccessToken($_SESSION['access_token']); 

    print_r($_SESSION['access_token']); 

    echo "<br>***************************************************************************************************************************************<br>"; 

    print "Access token creation time: ".date('M d, Y - H:i:s', $_SESSION['access_token']['created']); 

    echo "<br>*********************************************************************<br>"; 

    print "Refresh token: ".$_SESSION['access_token']['refresh_token']; 


} else { 

    if (!isset($_GET['code'])) { 

     $auth_url = $client->createAuthUrl(); 
     header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); 

    } else { 

     $client->authenticate($_GET['code']); 
     $_SESSION['access_token'] = $client->getAccessToken(); 

     $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/index.php'; 
     header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 

    } 

} 

?> 

Bitte vergessen Sie nicht, die Unterlagen zu überprüfen, die das Genehmigungsverfahren Weichen erklärt wird here gefunden.

+0

Ich führe Ihren genauen Code und habe keine verbundenen Anwendungen oder Seiten zu diesem Konto und bekomme NULL für das access_token und refresh_token. – wordSmith

+0

In diesem Fall scheint es, Ihre client_secrets.json Datei ist nicht gut. Haben Sie das Projekt mit den Redirect-URIs entsprechend konfiguriert? – Morfinismo

+0

Ja, ich habe es direkt von der api-Konsole heruntergeladen. Wenn die Weiterleitungen nicht konfiguriert wären, würde es mir diesen Fehler geben. – wordSmith

Verwandte Themen