GMail API Oauth Zend框架令牌刷新php


GMail API Oauth Zend framework token refresh php

我在这种情况下,我不得不使用zend框架与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));
}

我知道代码不是很好,但我想知道我是否应该得到一个刷新令牌随着访问令牌?

如果有人感兴趣,我已经这样做了修复它…现在它可以正常工作了

每次我需要对邮件做一些事情时,都会调用这个方法(如果访问令牌无效,那么您将无法访问,因此这是为了确保访问始终存在。)

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();   
    }   
    }