Nicht in der Lage zu aktualisieren, OAuth2-token in PHP, ungültige gewähren
Ich brauche, um ein PHP-Skript erstellt eine sigle Ereignis in Google Kalender.
Ich hatte keine Probleme beim einrichten von client id, client secret, dev Schlüssel und erstellen ein neues Ereignis.
Mein problem ist nur mit OAuth2, insbesondere ich brauche, um eine dauerhafte Verbindung und ich Tue nicht wollen zu tun, die Authentifizierung jedes mal wenn ich das Skript ausführen.
Eigentlich mit diesem script bin ich in der Lage zu bekommen ein token und refresh token, aber jede Stunde mein token abgelaufen ist und ich weiß nicht, wie um Sie zu aktualisieren. Wie kann ich diesen code Bearbeiten, das zu tun?
Kann ich sowohl die token und refresh token irgendwo und verwenden Sie immer die gleichen Daten?
Ich erhalten eine nicht abgefangene Ausnahme 'Google_AuthException' with message 'Fehler beim aktualisieren der OAuth2-token, message: '{ "error" : "invalid_grant"
Ich habe schon gelesen das einige andere posts zu diesem Thema hier im stackoverflow-aber ich habe noch keine Lösung gefunden... :\
<?php
require_once 'src/Google_Client.php';
require_once 'src/contrib/Google_CalendarService.php';
session_start();
$client = new Google_Client();
$client->setApplicationName("Calendar App");
$client->setClientId('xxxx');
$client->setClientSecret('yyy');
$client->setRedirectUri('http://www.zzzzzz');
$client->setDeveloperKey('kkk');
$client->setAccessType('offline');
$cal = new Google_CalendarService($client);
if (isset($_GET['logout'])) {
unset($_SESSION['token']);
}
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['token'] = $client->getAccessToken();
header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}
if (isset($_SESSION['token'])) {
//echo $_SESSION['token'];
//$client->setAccessToken($_SESSION['token']);
$authObj = json_decode($_SESSION['token']);
$accessToken = $authObj->access_token;
$refreshToken = $authObj->refresh_token;
$tokenType = $authObj->token_type;
$expiresIn = $authObj->expires_in;
echo 'access_token = ' . $accessToken;
echo '<br />';
echo 'refresh_token = ' . $refreshToken;
echo '<br />';
echo 'token_type = ' . $tokenType;
echo '<br />';
echo 'expires_in = ' . $expiresIn;
}
if(!empty($cookie)){
$client->refreshToken($this->Cookie->read('token'));
}
if ($client->getAccessToken()) {
$calList = $cal->calendarList->listCalendarList();
$_SESSION['token'] = $client->getAccessToken();
} else {
$authUrl = $client->createAuthUrl();
print "<a class='login' href='$authUrl'>Connect Me!</a>";
}
//Creation of a single event
$event = new Google_Event();
$event->setSummary($event_name);
$event->setLocation('');
....
?>
Vielen Dank für Ihre Unterstützung!
InformationsquelleAutor Roberto Milani | 2013-11-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Seite https://developers.google.com/accounts/docs/OAuth2WebServer#offline erklärt, wie die refresh-token arbeitet, und wie Sie es verwenden, um einen frischen token für den Zugriff mit Hilfe von http Anfangsinformationen.
Dieser Frage Gewusst wie: aktualisieren token mit Google-API-client? hier ist das php-äquivalent
DEBUGGING
Befolgen Sie diese drei Schritte Debuggen von beliebigen oauth-Anwendung
Stellen Sie sicher, dass Sie gelesen haben https://developers.google.com/accounts/docs/OAuth2 und auch die entsprechende sub-Seite (webapp, javascript, usw) je nachdem, welchen Geschmack der oauth-Verwendung. Sie werden nicht weit kommen, Debuggen Sie Ihre app, wenn Sie nicht verstehen, was es tut.
Verwenden das Oauth-Spielplatz am https://developers.google.com/oauthplayground/ Spaziergang durch das Oauth-Schritte und letztlich machen Sie ein Google-API-Aufruf. Dies bestätigt Ihr Verständnis und Ihnen zeigen, was die http-Aufrufe und-Antworten Aussehen
Mithilfe der Ablaufverfolgung/Protokollierung/proxy etc zu verfolgen, die eigentlichen http-Verkehr von Ihrem app. Vergleichen Sie dies mit dem, was Sie beobachtet, in Schritt 2. Dies sollte Ihnen zeigen, wo das problem liegt.
und vor allem habe ich definiert eine fest codierte JSON mit einem token und die refresh-token auf diese Weise. $arr = array('access_token' =>', yz...', 'refresh_token' => 'xyz', 'token_type' => 'Träger', 'expires_in' => 3600, 'created' => ...); $_SESSION['token'] = die Funktionen json_encode($arr); ich verstehe nicht, wenn ich auf refresh token. Vielen Dank im Voraus
Ich werde nicht Blick auf Ihren code (ich weiß nicht, php). Ich habe aktualisiert sich meine Antwort mit einigen Tipps zum Debuggen dieser Art von problem
Haben Sie jemals finden eine Lösung für das "Fehler beim aktualisieren der OAuth2-token"? Ich bin mit dem gleichen Problem. Danke!
InformationsquelleAutor pinoyyid
Ich habe diesen Fehler vor, denn ich versuchte, mich zu authentifizieren zweimal.
Da Sie diese Zeile:
if (isset($_GET['code']))
Wird es versuchen, sich zu authentifizieren, wenn der code in der Abfrage-string, unabhängig davon, ob Sie bereits authentifiziert sind. Versuchen Sie, zu überprüfen, ob die SESSION-token vorhanden ist, bevor Sie versuchen zu (re)authentifizieren.
InformationsquelleAutor thayne
Versuchen, entfernen setDeveloperKey(), diese wurde verursacht einige Probleme für mich, und es scheint nicht benötigte.
InformationsquelleAutor stealthysnacks