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個刷新令牌就會失效。第二十七個請求刷新令牌將使第二個先前發出的令牌無效,等等。
相關問題