Google drive api GoogleDriveAPI刷新令牌——这是使用php客户端库进行身份验证的正确方法吗?

Google drive api GoogleDriveAPI刷新令牌——这是使用php客户端库进行身份验证的正确方法吗?,google-drive-api,google-oauth,Google Drive Api,Google Oauth,我一直在搜索和阅读php库,以找出在第一个初始oAuth请求之后进行永久身份验证的最佳方法 下面的代码似乎工作正常,但我的问题是关于 $client->refreshttoken($refresh\u token) 编辑:我读了一些代码,这似乎不是正确的方法。调用setAccessToken时,我尝试使用刷新令牌,但也没有成功。这有文件记录吗 这是设置刷新令牌的正确方法吗?这个代币会过期吗 <?php require_once 'google-api-php-client/src/Goog

我一直在搜索和阅读php库,以找出在第一个初始oAuth请求之后进行永久身份验证的最佳方法

下面的代码似乎工作正常,但我的问题是关于

$client->refreshttoken($refresh\u 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);
?>

我相信您的电话:

$client->refreshToken($refresh_token);
是什么生成您的HTTP请求,谷歌向您发出另一个访问令牌。它没有设置刷新令牌

您需要将访问令牌和刷新令牌存储在您第一次请求时获得的DB或会话中。谷歌发行有限的刷新令牌

这里有一些关于如何评估您的令牌是否已过期的代码(第三个答案):

一旦您的访问令牌过期(1小时),您就可以拨打以下电话:

$client->refreshToken($refresh_token);
并存储生成的新访问令牌和过期数据。你基本上每小时重复一次这个过程

仅供参考:理论上,刷新令牌“永不”过期。我在自己的代码中发现这不是真的。在长时间不使用谷歌API(周末)之后,我感到恐惧:

{
"error": "invalid_token",
"error_description": "Invalid Value"
}
我发现我必须通过清除访问和刷新令牌(重置会话或DB)来编写代码,并通过编程调用来撤销过期的访问令牌(ruby)


然后必须从头开始重新启动整个OAuth2流。希望这个问题不会像我一样困扰你

这是检索访问令牌的正确方法吗?是否有任何异常被抛出?您确定您的客户端id和密码是您检索刷新令牌时使用的吗?刷新令牌永远不会过期。不,它是有效的,但我查看了库代码,它似乎在每次执行刷新令牌时都会发出http请求。是的,它确实有效。您应该做的是永久保留您的访问令牌,并在其过期时刷新。我们的客户端libs通常可以无缝地实现这一点,但是PHP客户端缺少一些实现来处理这种情况。您建议如何在PHP中处理这种情况?我们应该手动向API发出请求吗?我不想每次都打电话给refreshToken。
GET 'https://accounts.google.com/o/oauth2/revoke?token=' + access_token