2013-08-22 62 views
0

我一直在四處搜索並閱讀php庫,以找出在第一次初始oAuth請求後進行永久身份驗證的最佳方式。Google Drive API刷新令牌 - 這是使用php客戶端庫進行身份驗證的正確方法嗎?

下面的代碼看起來工作正常,但我的問題是關於

$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

這是檢索訪問令牌的正確方法嗎?有沒有拋出異常?你確定你的客戶端ID和密碼是你檢索刷新令牌的嗎?刷新令牌永不過期。 –

+0

不行,但我查看了庫代碼,它似乎在每次執行刷新令牌時發出一個http請求。 –

+0

是的。你應該做的是永久保留你的訪問令牌並刷新,如果它過期。我們的客戶端libs通常可以無縫地完成這項工作,但是PHP客戶端缺少一些實現來處理這種情況。 –

回答

0

我相信您的來電:

$client->refreshToken($refresh_token); 

是什麼產生的HTTP請求,谷歌發出你一個訪問令牌。它沒有設置你的刷新令牌。

您需要將您的訪問令牌刷新令牌存儲在您首次請求獲取的數據庫或會話中。 Google發行有限的刷新令牌。

這裏有一些代碼關於如何評估令牌是否過期或沒有(第3回答下):

How to refresh token with Google API client?

一旦你的訪問令牌已過期(1個小時),然後你做來電:

$client->refreshToken($refresh_token); 

而且存儲所產生的新的訪問令牌&過期數據。你基本上每小時重複一次這個過程。

作爲供參考:理論上,刷新標記「永不」過期。我在我自己的編碼中發現這不是真的。不打穀歌API(週末)的一段時間後,我已經得到了可怕的:

{ 
"error": "invalid_token", 
"error_description": "Invalid Value" 
} 

我發現,我必須解決這個代碼通過消除接入&刷新令牌(復位會話或DB ),並進行編程調用以撤銷過期的訪問令牌(ruby)。

GET 'https://accounts.google.com/o/oauth2/revoke?token=' + access_token 

然後,您必須從頭開始重新啓動整個OAuth2流程。希望這個問題不會讓你感到困擾,因爲它有我!

相關問題