2 votes

Actualisation des jetons avec l'API Google pour Google Agenda v3

Je cherche à utiliser l'API Google (PHP) pour effectuer une synchronisation quotidienne entre un calendrier système et les calendriers Google de l'utilisateur. Je veux qu'un utilisateur système puisse configurer l'accès à son calendrier une seule fois à partir du système, puis que le système puisse synchroniser les calendriers chaque jour via une tâche cron.

J'ai réussi à faire fonctionner tout le processus, de l'autorisation de l'accès à la synchronisation des calendriers, mais je me heurte aux temps d'expiration du jeton.

Je pensais que dans la version 3, l'ancien jeton servirait de jeton de rafraîchissement. Donc, une fois qu'un utilisateur avait fourni une autorisation, il me suffisait de passer l'ancien jeton à Google et il me permettrait d'exécuter la synchronisation.

Cela semble fonctionner, tant que je reste dans le délai d'expiration d'une heure du jeton initial. Une fois qu'une heure s'est écoulée, cela cesse de fonctionner et je dois demander à l'utilisateur d'autoriser à nouveau l'accès.

Existe-t-il un moyen de demander à l'utilisateur d'autoriser l'accès une fois, puis de synchroniser les calendriers une fois par jour sans que l'utilisateur ait besoin d'autoriser l'accès à nouveau?

Merci!

2voto

KENdi Points 5609

Eh bien, pendant votre autorisation avec Google, vous recevrez un jeton qui expirera en 3600 secondes ou une heure et il est normal d'expirer. Vous devez donc utiliser le jeton de rafraîchissement pour obtenir un nouveau jeton de travail.

Voici les étapes dont vous avez besoin:

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

Il est important de sauvegarder ce refresh_token, puis vous pouvez le mettre à jour avec

$client->refreshToken($your_saved_refresh_token);

Ensuite, définissez votre nouveau jeton d'accès en session:

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

Pour plus d'informations, consultez cette question sur SO.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X