【问题标题】:how and when to use the refresh token with php google calender api如何以及何时将刷新令牌与 php google calendar api 一起使用
【发布时间】:2012-08-17 18:15:48
【问题描述】:

我正在使用 php google calendar api v3。

在日历所有者授权后,我将 access_token 与刷新令牌一起保存在数据库中。

当日历页面被任何人显示时,我有一小段代码可以工作

$client = new apiClient();
$client->setApplicationName("My Calendar");
$client->setAccessType('offline');
$client->setAccessToken( $_SESSION['google']['access_token'] );
$calService = new apiCalendarService($client);
$optParams = array('timeMin' => $gstart, 'timeMax'=> $gend);
$events = $calService->events->listEvents($_SESSION['google']['google_cal_id'], $optParams);

我在文档中看到,在某些时候我可能必须使用刷新令牌(我在数据库中拥有。) 我不知道如何使用此令牌以及何时使用。 setAccessToken 会在某个时候抛出异常吗?什么是最好的测试方法 谢谢

【问题讨论】:

    标签: php google-api google-calendar-api


    【解决方案1】:

    如果您想在不重新进行身份验证的情况下保持身份验证处于活动状态,则使用刷新令牌。例如,我们有一个使用谷歌分析 api 的报告工具。我需要每 10 分钟对其运行一次查询,因此一旦用户验证了我们的应用程序,我就会使用刷新令牌,这样即使用户未登录,我的自动查询也可以运行。基本上,刷新令牌用于保持会话处于活动状态无需用户交互。我希望这是有道理的。

    【讨论】:

    • 那你每次都这样做吗?这是我感到困惑的地方,如果它从数据库(包括刷新令牌的整个 JSON)和 $client->setAccessToken( $_SESSION['google']['access_token'] ) 获取访问令牌;即使用户是未登录或未通过身份验证的访问者,它也能正常工作
    • 是的,但最终访问令牌将过期。因此,如果您想在一年后使用代币,您将无法使用。在这种情况下,您将不得不定期使用刷新令牌来防止访问令牌过期。
    • 那么当访问令牌过期时会发生什么故障? --> $client->setAccessToken( $_SESSION['google']['access_token'] );有没有关于如何做到这一点的例子?我假设刷新令牌返回一个新的访问令牌,我用新的替换我在数据库中的内容?我想我正在努力的一个部分是“定期”。我不想每次都买一个新的,我认为这真的无效。感谢您的帮助
    • 在此处查看此页面developers.google.com/accounts/docs/OAuth2WebServer,尤其是有关离线访问的部分。还有适用于多种语言的代码示例。
    【解决方案2】:

    访问令牌在 3600 秒或一小时后过期。但是您可以使用刷新令牌来获取新的访问令牌,而无需用户重新验证。

    有关如何使用 php 获取刷新令牌的详细信息,请查看此帖子中接受的答案: Automatically refresh token using google drive api with php script

    如果您使用 REST API 而不是 PHP SDK,它基本上会将您的刷新令牌、client_id、秘密发送到https://accounts.google.com/o/oauth2/token,如页面底部here 所述

    刷新令牌不会过期,除非用户撤销它或您以编程方式撤销它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-03
      • 2014-11-07
      • 2017-03-21
      • 2023-04-02
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      相关资源
      最近更新 更多