Google API Client “actualiser jeton doit être transmis ou mis dans le cadre de setAccessToken”
Je suis actuellement confronté à un problème très étrange, en effet, j'ai suivi ce même guide (https://developers.google.com/google-apps/calendar/quickstart/php) à partir de Google documentation de l'API. Je l'ai essayé deux fois, la première fois qu'il fonctionne comme un charme, mais après le jeton d'accès avait expire le script fourni directement par l'API Google Doc a été incapable de les rafraîchir.
TL;DR
Voici le message d'erreur:
sam@ssh:~$ php www/path/to/app/public/quickstart.php
Fatal error: Uncaught exception 'LogicException' with message 'refresh token must be passed in or set as part of setAccessToken' in /home/pueblo/www/path/to/app/vendor/google/apiclient/src/Google/Client.php:258
Stack trace:
#0 /home/pueblo/www/path/to/app/public/quickstart.php(55): Google_Client->fetchAccessTokenWithRefreshToken(NULL)
#1 /home/pueblo/www/path/to/app/public/quickstart.php(76): getClient()
#2 {main}
thrown in /home/pueblo/www/path/to/app/vendor/google/apiclient/src/Google/Client.php on line 258
Ici est la partie du script php à partir de google, j'ai modifié le:
require_once __DIR__ . '/../vendor/autoload.php';
//I don't want the creds to be in my home folder, I prefer them in the app's root
define('APPLICATION_NAME', 'LRS API Calendar');
define('CREDENTIALS_PATH', __DIR__ . '/../.credentials/calendar-php-quickstart.json');
define('CLIENT_SECRET_PATH', __DIR__ . '/../client_secret.json');
J'ai aussi modifié le expandHomeDirectory
afin que je puisse "désactiver" il sans modifier trop de code:
function expandHomeDirectory($path) {
$homeDirectory = getenv('HOME');
if (empty($homeDirectory)) {
$homeDirectory = getenv('HOMEDRIVE') . getenv('HOMEPATH');
}
return $path;
//return str_replace('~', realpath($homeDirectory), $path);
}
Afin de vérifier si je me suis trompé ou si Google était, j'ai fait une expérience: hier soir, j'ai lancer le script de démarrage rapide de ssh pour vérifier si elle travaillait, et elle l'a été, j'ai donc décidé de vérifier ce matin si il travaille encore comme elle l'était avant que je dormais, et il n'était pas le cas je pense qu'il ya quelque chose de mal avec Google quickstart.php
.
J'espère que quelqu'un pourrait m'aider, j'ai déjà vérifié toutes les autres posts sur le sujet, mais ils sont tous obsolètes.
Non, en effet apparaître comme une réponse valable cependant le bug cet utilisateur a signalé a déjà été fixé dans le code que j'utilise depuis qu'il a soumettre un ticket pour Google qui l'ont fixé. Mais merci d'essayer de m'aider 🙂
Le 20 novembre, en 2017, le Google exemple de code PHP publié comme quickstart.php est toujours une erreur que vous avez demandé à propos de...
OriginalL'auteur Sam | 2016-09-04
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème récemment et je l'ai résolu avec cette.
Je vais vous expliquer .....
Actualiser jeton n'est pas retourné parce que nous n'avons pas la force de la approvalPrompt. Le mode hors ligne n'est pas assez. Nous devons forcer le approvalPrompt. Aussi la redirectURI doit être définie avant de ces deux options. Il a travaillé pour moi.
C'est ma fonction
C'est un plaisir
N'oubliez pas que vous aurez besoin de mettre le jeton d'accès et la date de création de votre fichier de sauvegarde à chaque fois que le jeton d'accès est renouvelé. Le
$client->setTokenCallback(...)
vous donne un crochet pour stocker le nouveau jeton à chaque fois que le client (automatiquement) actualise. Si vous ne le faites pas, alors vous finissez par l'actualisation de l'un jeton sur chaque appel de l'API à partir d'une heure après l'autorisation initiale. Qui peut être bien si seulement avoir un seul prévue appel d'API une fois par jour, mais il ajoute beaucoup de surcharge si il fonctionne beaucoup plus souvent.Merci @Jason
vous écrivez Aussi "le redirectURI doit être réglé à l'issue de ces deux options", mais dans votre exemple redirectURI est avant ces deux options. ??
OriginalL'auteur Ulrich Dohou
Que j'ai rencontré le même problème avec les nouvelles api google bibliothèque. Recherche de solution apporté le lien suivant:
RefreshToken Pas se retourner après je reçois un nouveau jeton des feuilles de calcul google API
Basé sur cette information, j'ai modifié le quickstart partie de code pour l'adapter à mes besoins. Après la première autorisation avec Google j'ai obtenu lecteur-php-guide de démarrage rapide.json qui contient refresh_token qui expire en 3600 secondes ou une heure. L'actualisation jeton est émis qu'une seule fois, donc si il est perdu, puis de le ré-autorisation est requise.
Alors, que de l'avoir toujours dans le lecteur-php-guide de démarrage rapide.json j'ai fait suivant:
Je suis à l'aide de la Feuille de l'API v4.. ayant le même code, mais il donne toujours la même erreur "actualiser jeton doit être transmis ou mis dans le cadre de setAccessToken”
avez-vous essayé toutes les réponses dans ce fil ? Je ne sais pas comment vous aider à l'homme, il a été une année. Je ne sais même pas ce que "la Feuille de l'API v4" est. Il suffit de faire une sauvegarde de votre configuration actuelle, puis à essayer toutes les solutions ici et d'arrêter jusqu'à ce que vous trouver un travail. Bonne chance.
OriginalL'auteur Salavat Sayfullin
Mon conseil est enregistrer actualiser jeton .json immédiatement après avoir jeton d'accès et si le jeton d'accès expiré utilisation d'actualisation jeton.
Dans mes projets fonctionnent de cette manière:
OriginalL'auteur Michal Blažek
juste une mise à jour pour toute personne ayant des problèmes avec ce message, c'est surtout parce que seule la première commande fetchAccessTokenWithAuthCode() génère credencials qui contient le jeton d'actualisation (techniquement toujours valide - pas 2 heures de validité si vous n'avez pas la révoquer). Lorsque vous obtenez le nouveau remplace l'original mais il ne contient pas l'actualisation de jeton qu'il doit donc, la prochaine fois vous avez besoin de mettre à jour le jeton, il va se planter. Ce problème peut être facilement résolu en remplaçant la fonction de rafraîchissement à l'exemple de ce:
Désormais, chaque fois que vous mettez à jour le jeton d'accès de votre actualisation jeton est transmis trop.
OriginalL'auteur Therian
J'ai eu les mêmes problèmes et, enfin, aller au travail:
Histoire:
J'ai reçu le même message d'erreur. Voici ce que j'ai trouvé:
Cette erreur:
PHP Fatal error: Uncaught LogicException: actualiser jeton doit être transmis ou mis dans le cadre de setAccessToken dans /Bibliothèque/WebServer/Documents/Sites/test/scripts/vendor/google/apiclient/src/Google/Client.php:267
Fait référence à la mise à jour jeton d'accès (aka Actualisation) méthode:
Pourquoi était-il défectueux? Longue histoire courte, j'ai réalisé lorsque j'ai imprimé $accessToken tableau, qui vient de décodage du fichier json (par le démarrage rapide code que vous avez posté,/qui vient de google)
informations d'identification/calendrier-php-guide de démarrage rapide.json
J'ai trouvé l'erreur due à la façon dont le accessToken tableau affiche quand je print_r:
Tableau
(
[access_token] => Array
(
[access_token] => xyz123
[token_type] => Porteur
[expires_in] => 3600
[refresh_token] => xsss112222
[créé] => 1511379484
)
)
Solution:
$refreshToken = $accessToken["access_token"]["refresh_token"];
juste avant cette ligne:
Je peux enfin actualiser le jeton comme nécessaire quand il expire dans moins d'une heure. Je pense que les devs de cet article suppose le tableau affiche:
Tableau
(
[access_token] => xyz123
[token_type] => Porteur
[expires_in] => 3600
[refresh_token] => xsss112222
[créé] => 1511379484
)
alors qu'ils pensaient, il vous suffit de faire $accessToken["refresh_token"]; ce n'est pas correct.
Maintenant, nous avons une valeur valide pour $refreshToken, donc l'erreur devrait disparaître si vous faites cela. J'ai aussi mis à jour l'auteur via le lien commentaires, afin de savoir à ce sujet, au cas où d'autres devs php rencontrer ce problème. Espérons que cela aide quelqu'un. Toutes mes excuses si j'ai formaté ce post mal, je suis nouveau sur SE je voulais juste partager que j'ai finalement obtenu ce travail.
OriginalL'auteur
Vous avez besoin de sérialiser les
accestoken
lorsque vous écrivez à lacredentialsPath
.Et lorsque vous lisez le fichier que vous devez unserialize.
De pleine fonction de
OriginalL'auteur Nick de Pannekoek
Google a mis à jour leur PHP de Démarrage rapide, avec une amélioration de la méthode pour gérer cela:
Extrait de code ci-dessous:
Le 20 novembre, en 2017, le Google exemple de code PHP publié comme quickstart.php est toujours une erreur que l'affiche originale a demandé à propos.
OriginalL'auteur dxdc
Dans mon cas, j'avais oublié de définir le type d'accès "hors ligne", sans lequel le jeton d'actualisation n'a pas été généré.
Une fois que c'est fait, l'exemple de code donné dans le google documentation.
OriginalL'auteur jahackbeth
Ainsi, Après un certain temps vieweing ce code:
tous était nécessaire ce changement est-il:
puisque cette fonction $client->getRefreshToken() renvoie la valeur null, et si vous fournissez le $accessToken directement, il fonctionne très bien et la mise à jour de votre dossier, j'espère qu'elle résout quelqu'un enjeu.
OriginalL'auteur oron abutbul