我一直在搜索php库,以找出在第一次初始oAuth请求后进行永久身份验证的最佳方法。
下面的代码似乎工作正常,但我的问题是关于
$client->refreshToken($refresh_token);
setAccessToken
时尝试使用刷新令牌,但这也无效。这是在任何地方记录的吗?
这是设置刷新令牌的正确方法吗?这个令牌会过期吗?
<?php
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';
$client_id = 'CLIENT ID';
$client_secret = 'CLIENT SECRET';
$refresh_token = 'REFRESH TOKEN';
$client = new Google_Client();
// Get your credentials from the APIs Console
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri('http://redirecturl.com');
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
$client->setAccessType('offline');
$client->refreshToken($refresh_token);
?>
答案 0 :(得分:1)
我相信你的呼吁:
$client->refreshToken($refresh_token);
是生成您向Google发送另一个访问令牌的HTTP请求的原因。它没有设置刷新令牌。
您需要存储访问令牌&amp;刷新您在第一次请求时获得的数据库或会话中的令牌。 Google发布了有限的刷新令牌。
这里有一些关于如何评估你的令牌是否已经过期的代码(第三个答案):
How to refresh token with Google API client?
一旦您的访问令牌过期(1小时),您就拨打:
$client->refreshToken($refresh_token);
并存储生成的新访问令牌&amp;到期数据。你基本上每小时重复一次这个过程。
作为一个FYI:从理论上讲,刷新令牌“永不”过期。我在自己的编码中发现这不是真的。经过长时间没有访问谷歌API(周末),我已经陷入了恐惧:
{
"error": "invalid_token",
"error_description": "Invalid Value"
}
我发现我必须通过消除访问权限来解决这个问题。刷新令牌(重置会话或数据库),并进行编程调用以撤销过期的访问令牌(ruby)。
GET 'https://accounts.google.com/o/oauth2/revoke?token=' + access_token
然后,您必须从头开始重新启动整个OAuth2流程。希望这个问题不会困扰你,因为它有我!