【问题标题】:How should I do with refresh token (Google calendar)我应该如何处理刷新令牌(谷歌日历)
【发布时间】:2017-09-29 17:01:18
【问题描述】:

在过去的几天里,我浪费了很多美好的时光 现在我设法获得了刷新令牌..我之前无法获得刷新令牌..

我的目的是在没有谷歌用户登录的情况下同步谷歌日历数据

我做了什么:

  1. 我将令牌信息存储在我的数据库中
  2. 当用户想要同步时,我使用存储的信息从 Google 日历 API 中提取数据 但是令牌有过期日期,即一个小时
  3. 我假设我可以使用刷新令牌获取可用令牌并再次从 Google 日历 api 中提取数据(但如何?)

额外问题:我可以从之前的刷新令牌中获得另一个刷新令牌吗?是不是我可以一遍又一遍地获得刷新令牌?

这是我的一些代码:

 public function __construct()
{
    $client = new Google_Client();
    $client->setAuthConfig('client_secret.json');
    $client->addScope(Google_Service_Calendar::CALENDAR); // CALENDAR READONLY 는 읽기만 가능
    $guzzleClient = new \GuzzleHttp\Client(array('curl' => array(CURLOPT_SSL_VERIFYPEER => false)));
    $client->setHttpClient($guzzleClient);
    $client->setAccessType ("offline");
    $client->setApprovalPrompt ("force");
    $client->setRedirectUri('http://localhost/smart_mirror/GoogleCalendarApi-master/public/api/cal');
    $this->client = $client;
}


$refresh_token=$this->client->fetchAccessTokenWithRefreshToken($this->client->getRefreshToken()); 
$this->client->getAuth()->refreshToken($this->client->getAuth()->getRefreshToken()); 
$refresh_token=$this->client->getAccessToken();

【问题讨论】:

    标签: oauth-2.0 google-calendar-api


    【解决方案1】:

    访问令牌的生命周期有限。如果您的应用程序需要访问 在单个访问令牌的生命周期之外的 Google API,它可以 获取刷新令牌。刷新令牌允许您的应用程序 获取新的访问令牌。

    注意:将刷新令牌保存在安全的长期存储中并继续 只要它们仍然有效,就可以使用它们。限制适用于数量 刷新每个客户端-用户组合发出的令牌,并且每个 跨所有客户端的用户,并且这些限制是不同的。如果你的 应用程序请求足够的刷新令牌来遍历其中一个 限制,旧的刷新令牌停止工作。

    Refreshing an access token (offline access)

    如果您的应用需要离线访问 Google API,请将 API 客户端的访问类型设置为离线:

    $client->setAccessType("offline");
    

    这是一个SO post 一个额外的示例。

    【讨论】:

      猜你喜欢
      • 2021-05-06
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2021-06-14
      • 2019-01-11
      • 2015-05-17
      • 2019-02-02
      相关资源
      最近更新 更多