google api 客户端不工作的刷新令牌
refresh token with google api client not working
在我的网站上,我有一个上传按钮,用于通过 api 将文件上传到 google 驱动器。
这是我的代码:
$auth_code = GOOGLEDRIVE_AUTH_CODE;
$access_token = GOOGLEDRIVE_ACCESS_TOKEN;
$refresh_token = GOOGLEDRIVE_REFRESH_TOKEN;
$client_id = 'Google_App_Client_ID';
$client_secret = 'Google_App_Client_Secret';
$redirect_uri = 'Redirct_Url';
$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->addScope("https://www.googleapis.com/auth/drive");
$service = new Google_Service_Drive($client);
if (isset($access_token) && $access_token) {
$client->setAccessToken($access_token);
if ($client->isAccessTokenExpired()) {
$refresh_token = $client->getRefreshToken();
$client->refreshToken($refresh_token);
$access_token = $client->getAccessToken();
$co->save('GDRIVE_ACCESS_TOKEN',$access_token);
$co->save('GDRIVE_REFRESH_TOKEN',$refresh_token);
}
} else {
$authUrl = $client->createAuthUrl();
}
这一行抛出错误
$client->refreshToken($refresh_token);
"Error refreshing the OAuth2 token, message: '{ "错误": "invalid_grant" }'"
仔细阅读错误消息,感觉令牌刷新突然不起作用了。就像我说的,这个上传工具几个月来一直运行良好。
有什么想法吗?
谢谢,
米敦
Invalid_grant
- 您的服务器时钟与 NTP 不同步。 (解决办法:检查服务器时间,如果不正确,修复。)
如果不是这样,那么除了要求用户再次进行身份验证之外没有解决办法。刷新令牌过期的可能原因。
- 用户已撤销您的访问权限。
- 六个月内未使用刷新令牌来请求新的访问令牌。
- 已超出刷新令牌限制。应用程序可以请求多个刷新令牌。例如,这在用户想要在多台机器上安装应用程序的情况下很有用。在这种情况下,需要两个刷新令牌,每个安装一个。当刷新令牌的数量超过限制时,旧令牌将失效。如果应用程序尝试使用无效的刷新令牌,则会返回 invalid_grant 错误响应。每对唯一的 OAuth 2.0 客户端的限制是 25 个刷新令牌(请注意,此限制可能会更改)。如果应用继续为同一个Client/Account对请求刷新令牌,一旦发出第26个令牌,之前发出的第1个刷新令牌将失效。第 27 个请求的刷新令牌将使之前发出的第 2 个令牌失效,依此类推。
在我的网站上,我有一个上传按钮,用于通过 api 将文件上传到 google 驱动器。
这是我的代码:
$auth_code = GOOGLEDRIVE_AUTH_CODE;
$access_token = GOOGLEDRIVE_ACCESS_TOKEN;
$refresh_token = GOOGLEDRIVE_REFRESH_TOKEN;
$client_id = 'Google_App_Client_ID';
$client_secret = 'Google_App_Client_Secret';
$redirect_uri = 'Redirct_Url';
$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->addScope("https://www.googleapis.com/auth/drive");
$service = new Google_Service_Drive($client);
if (isset($access_token) && $access_token) {
$client->setAccessToken($access_token);
if ($client->isAccessTokenExpired()) {
$refresh_token = $client->getRefreshToken();
$client->refreshToken($refresh_token);
$access_token = $client->getAccessToken();
$co->save('GDRIVE_ACCESS_TOKEN',$access_token);
$co->save('GDRIVE_REFRESH_TOKEN',$refresh_token);
}
} else {
$authUrl = $client->createAuthUrl();
}
这一行抛出错误
$client->refreshToken($refresh_token);
"Error refreshing the OAuth2 token, message: '{ "错误": "invalid_grant" }'"
仔细阅读错误消息,感觉令牌刷新突然不起作用了。就像我说的,这个上传工具几个月来一直运行良好。
有什么想法吗?
谢谢, 米敦
Invalid_grant
- 您的服务器时钟与 NTP 不同步。 (解决办法:检查服务器时间,如果不正确,修复。)
如果不是这样,那么除了要求用户再次进行身份验证之外没有解决办法。刷新令牌过期的可能原因。
- 用户已撤销您的访问权限。
- 六个月内未使用刷新令牌来请求新的访问令牌。
- 已超出刷新令牌限制。应用程序可以请求多个刷新令牌。例如,这在用户想要在多台机器上安装应用程序的情况下很有用。在这种情况下,需要两个刷新令牌,每个安装一个。当刷新令牌的数量超过限制时,旧令牌将失效。如果应用程序尝试使用无效的刷新令牌,则会返回 invalid_grant 错误响应。每对唯一的 OAuth 2.0 客户端的限制是 25 个刷新令牌(请注意,此限制可能会更改)。如果应用继续为同一个Client/Account对请求刷新令牌,一旦发出第26个令牌,之前发出的第1个刷新令牌将失效。第 27 个请求的刷新令牌将使之前发出的第 2 个令牌失效,依此类推。