0

在我的网站上,我有一个上传按钮,通过API上传文件到谷歌驱动器。刷新令牌与谷歌API客户端不工作

这是我的代码:

$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); 

“错误刷新的OAuth2令牌,消息: '{ ”错误“: ”invalid_grant“}'”

阅读错误消息,听起来像令牌刷新突然不起作用。就像我说的,这个上传工具已经好几个月了。

任何想法?

感谢, Midhun

回答

0

Invalid_grant

  1. 你的服务器的时钟没有与NTP同步。 (解决方案:检查服务器时间,如果它不正确修复它。)

如果不是那么除了要求用户再次认证之外没有任何修复。刷新令牌过期的可能原因。

  1. 该用户已撤销您的访问权限。
  2. 刷新令牌在六个月内未用于请求新的访问令牌。
  3. 已超过刷新令牌限制。应用程序可以请求多个刷新令牌。例如,这在用户想要在多台机器上安装应用程序的情况下非常有用。在这种情况下,需要两个刷新标记,每个安装一个。当刷新令牌的数量超过限制时,旧令牌变为无效。如果应用程序尝试使用无效刷新标记,则返回invalid_grant错误响应。每个唯一一对OAuth 2.0客户端的限制是25个刷新令牌(请注意,此限制可能会发生变化)。如果应用程序继续为相同的客户端/帐户对请求刷新令牌,则一旦发出第26个令牌,以前发出的第1个刷新令牌就会失效。第二十七个请求刷新令牌将使第二个先前发出的令牌无效,等等。
相关问题