Gmail API Oauth Zend framework обновление токена php


Я нахожусь в ситуации, когда мне приходится использовать zend framework вместе с oauth 2 для gmail. все работает нормально, и я получаю сообщения и вхожу в систему просто отлично, моя проблема в том, что срок действия токена истекает слишком быстро.

Могу ли я настроить его так, чтобы он никогда не истекал, или как я должен реализовать токен обновления в платформе? я использую стандартный код, когда дело доходит до входа в систему.

Что мне в основном нужно, так это маркер доступа, срок действия которого не истекает, или руководство по реализации маркера обновления и как чтобы использовать его в программе.

Любая помощь приветствуется. спасибо.

Это страница входа в систему.

include("../classes/Google/Client.php");


$client_id = "hidden";
$client_secret = "hidden";
$redirect_uri = "hidden";

$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->addScope("https://www.googleapis.com/auth/userinfo.email");
$client->addScope("https://www.googleapis.com/auth/userinfo.profile");
$client->addScope("https://mail.google.com/");

$client->setRedirectUri($redirect_uri);
$authUrl = $client->createAuthUrl();


echo "<a href=".$authUrl.">Login</a>";

Это обратный вызов

$client_id = "hidden";
$client_secret = "hidden";
$redirect_uri = "hidden";

$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
session_start();
if (isset($_GET['code'])) {
  $client->authenticate($_GET['code']);


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



  $oauth2 = new Google_Service_Oauth2($client);
  $user = $oauth2->userinfo->get();
  $_SESSION['email'] = $user;


  $redirect = 'hidden';
  header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}

Я знаю, что код не очень хорош, но мне интересно, должен ли я получить токен обновления вместе с токеном доступа?

Author: T.B Ygg, 2014-05-26

1 answers

Если кому-то интересно, я сделал вот так, чтобы исправить это... теперь все работает так, как должно.

Этот метод вызывается каждый раз, когда мне нужно что-то сделать с почтой (если маркер доступа недействителен, то у вас не будет доступа, поэтому это делается для того, чтобы убедиться, что доступ всегда есть.)

public function checktokenexpiry()
    {
    global $google_client; // this is global as we use it in our webservice.
    session_start();
    $time_created = json_decode($_SESSION['access_token']);

    $t=time();
    $timediff=$t-$time_created->created;

    if($timediff>3500) // 3500 as i want to have a little time to connect if it is just about to need refreshing. 
    {
        $user = json_decode($_COOKIE['user']);
        $usermail = $user->email;
        $refreshtoken = $this->model->getRefreshToken($usermail);
        $refreshtoken = $refreshtoken[0]['google_refresh_token'];

        $google_client->refreshToken($refreshtoken);
        $_SESSION['access_token'] = $google_client->getAccessToken();   
    }   
    }
 1
Author: T.B Ygg, 2014-05-28 06:00:10