【发布时间】:2012-09-13 21:29:23
【问题描述】:
我正在使用谷歌日历 API。这就是我想要的,一旦您授予应用程序权限,我就可以随时使用该应用程序,而无需每天授予访问权限。我一直听说我需要保存访问令牌或使用刷新令牌来做我想做的事情。这是事情,你是怎么做的?代码看起来如何?我尝试将令牌保存在 cookie 中,但一个小时后,访问令牌已过期。如何让用户保持登录状态?
PS:请给我代码示例和解释。
这是我的代码(使用 CakePHP):
$client = new Google_Client();
$client->setApplicationName("Wanda3.0 Agenda");
$cal = new Google_CalendarService($client);
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['token'] = $client->getAccessToken();
header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
}
if (isset($_SESSION['token'])) { $client->setAccessToken($_SESSION['token']); }
if ($client->getAccessToken()) {
/************* Code entry *************/
}else{
/************* Not connected to google calendar code *************/
$authUrl = $client->createAuthUrl();
$returnArr = array('status' => 'false', 'message' => "<a class='login' href='$authUrl'>Connect Me!</a>");
return $returnArr;
}
【问题讨论】:
-
访问令牌过期 - 这就是您获得刷新令牌的原因。您应该能够使用身份验证时获得的刷新令牌获取新的访问令牌(和更新的刷新令牌)。 (不幸的是,我没有任何代码示例)
-
(但是,只有在原始访问令牌已过期时才使用刷新令牌:stackoverflow.com/a/10186904/1313164)
-
@TerrySeidler 理论上我知道该怎么做,或者至少这是我目前所理解的:当访问令牌过期时,我想使用刷新令牌来获取新令牌,但是最大的问题是如何在实践中做到这一点。
-
我明白了!你可以试试这个页面上的最后一条评论,似乎对那个人有用:code.google.com/p/google-api-php-client/issues/detail?id=94
-
检查了您发送的内容并应用了它,等了一个小时,它仍然登录!我的最终测试是等待几天,看看它是否仍然登录。如果它仍然有效,请向@TerrySeidler 致敬!我会在几天内回答这个问题!
标签: php google-api oauth-2.0 access-token