2016-11-28 2 views
0

Also versuche ich, das Zugriffstoken zu aktualisieren, um zu funktionieren. Wenn das Zugriffstoken abgelaufen ist, führe ich refreshToken() aus und übergebe das refresh_token, um ein neues access_token von Google zu erhalten.Das neue access_token via refresh_token zu bekommen ist sehr unzuverlässig

Manchmal scheint es zu funktionieren, aber otherwhile ich bekomme die Fehlermeldung invalid_grant danach. Scheint so, als könnte ich nicht mehr als ein paar Tage vergehen, ohne den Zugriff auf meinen YouTube-Kanal erneut zu autorisieren.

Alles Wesentliche, was ich falsch mache?

if ($client->getAccessToken()) {  
    if($client->isAccessTokenExpired()) { 
     $newToken = $client->getAccessToken(); 

     //Run refreshToken() and pass in the refresh token to get a fresh access token. 
     $client->refreshToken($newToken['refresh_token']); 

     //Take old key object and replace everything except for refresh_token  
     $newKey = $client->getAccessToken(); 

     $newKeyWithRefreshToken = json_decode($oldKey); 
     $newKeyWithRefreshToken->access_token = $newKey['access_token']; 
     $newKeyWithRefreshToken->token_type = $newKey['token_type']; 
     $newKeyWithRefreshToken->expires_in = $newKey['expires_in']; 
     $newKeyWithRefreshToken->created = $newKey['created']; 

     //save to db 
     DB::getInstance()->update('channel', $channelId , array(
      'credentials' => json_encode($newKeyWithRefreshToken) 
     )); 

Antwort

0

Während der Genehmigung mit Google, erhalten Sie einen Token erhalten, die in einer Stunde oder 3600 Sekunden abläuft und es ist normal abgelaufen werden. Sie benötigen also ein Aktualisierungstoken, um ein neues funktionierendes Token zu erhalten.

Hier sind die Schritte, die Sie brauchen:

$token = $client->getAccessToken(); 
$authObj = json_decode($token); 
if(isset($authObj->refresh_token)) { 
save_refresh_token($authObj->refresh_token); 
} 

Es ist wichtig, diese refresh_token zu speichern, dann können Sie es mit

$client->refreshToken($your_saved_refresh_token); 

aktualisieren und setzen Sie dann Ihren neuen Zugriffstoken zur Sitzung :

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

Weitere Informationen finden Sie unter SO question.

+0

Hallo KENdi, zuerst einmal, vielen Dank für Ihre Antwort. Vielleicht war ich nicht klar genug, aber ich habe kein Problem damit, ein refresh_token zu bekommen und damit ein neues access_token zu bekommen. Es funktioniert nur für mich alle paar Tage nicht mehr und sagt, dass meine Zugangsdaten jetzt ungültig sind. ("invalid_grant") – Noniq

Verwandte Themen