Google-API-PHP-offline-Zugang", invalid_grant: Code wurde bereits eingelöst"

So gestatten Sie eine Google-Client dauerhaft, bis der Benutzer wird die Berechtigung?

Ich versuche, eine app, die verbindet zu Google-Kalender. Es hat ausgeführt in PHP und deshalb bin ich über die Google-API-PHP-client von google.

Die app muss offline-Zugriff, so dass es funktioniert, wenn der Benutzer nicht in der Sitzung. Die app ist bestimmt, damit die Benutzer zu verwalten und anzeigen, seine Kalender, die öffentlich auf websites und so.

Habe ich erstellt Anmeldeinformationen in Google-Konsole mit service-Methode (mit der client-ID und client secret). Mit dem Google-API-client, den ich auch angeforderte Berechtigung. Ich öffne ein neues browser-Fenster, die der Benutzer autorisiert ist, einen Autorisierungs-code, der zurückgegeben wird, durch Google. Nehme ich diesen code, speichern Sie es und verwenden Sie es zulassen, dass der client erfolgreich eine Verbindung zu Google Kalender und exchange-Daten.

Nun habe ich verstanden, das ist ein token, das geht zu verfallen. Es sei denn, man nutzt den offline-Zugriff, die ich eingestellt habe. Aber nach ein paar Minuten oder weniger, ich bekomme immer eine Fehlermeldung: Error fetching OAuth2 access token, message: 'invalid_grant: Code was already redeemed.

Dies ist der code, den ich verwenden, um die Verbindung des Clients mit:

$client = new \Google_Client();
$client->setApplicationName( 'My App' );
$client->setScopes( array( \Google_Service_Calendar::CALENDAR ) );
$client->setClientId( $this->google_client_id );
$client->setClientSecret( $this->google_client_secret );
$client->setRedirectUri( $this->google_client_redirect );
$client->setAccessType( 'offline' );

if ( $code = $this->google_client_auth ) {

    try {

        $client->authenticate( $code );

    } catch( \Exception $e ) {
            var_dump( $e );
    }    

}

return new \Google_Service_Calendar( $client );

Dies ist eine Methode innerhalb einer Klasse.

Die client ID und das client secret sind gespeichert in der app-Einstellungen.

Bin ich auch zu speichern Sie den code zurückgegeben, indem der Benutzer in eine Einstellung, aber ich denke, das ist, wo ich"m tun falsch? Ich Stelle den link zu einer Google OAuth Fenster in eine eigene Methode (die auch verwendet die gleichen client-id und geheimen, und legt offline-Methode). Und um die Ermächtigung zu erhalten, ist die Arbeit. Ich kann den Kalender. Es funktioniert einfach nicht lange...

InformationsquelleAutor der Frage unfulvio | 2015-09-21

Schreibe einen Kommentar