2016-02-26 104 views
0

基本上,我一直在使用PHP的谷歌API客戶端庫訪問多個用戶(允許通過oAuth2工作流程訪問)的Gmail收件箱,並提取一些數據...PHP谷歌API客戶端不一致無法加載適當的憑據

觀察: 客戶端得到驗證正確後,才10到15分鐘的時間...... 一旦令牌用於驗證用戶的Gmail收件箱,數據是該用戶訪問。但是當下一個令牌用於認證另一個用戶的Gmail收件箱時,PHP google api客戶端不會重新加載,而是使用先前的用戶(我懷疑它已被緩存/存儲在會話中)。

碼流:

<?php 
$tokenArray = array(); 
foreach($tokenArray as $token) { 
$googleclient = getGoogleClient($token); 
//$googleclient is stale even after the second iteration of the foreach loop 
$service = new Google_Service_Gmail($googleclient); 
$googleuser = "me"; 
//if we change the variable $googleuser to some email address "[email protected]", we get a "Delegation denied for [email protected]" 
$userprofile = $service->users->getProfile($googleuser); 
var_dump($userprofile);//same data 
} 
?> 

,如果我們把它拿出來循環和後25使單獨的呼叫 - 30分鐘(或重新啓動Apache網絡服務器),第二代幣以客戶端庫使用正常。

是因爲Google API PHP客戶端庫緩存對象並重用它30分鐘或者我錯過了什麼?

我的問題是如何處理多個令牌時重新加載客戶端?

是否有正確的方法/任何其他方式來初始化客戶端?

做任何你有PHP谷歌API客戶端庫...我已經在官方文檔,但無濟於事檢查它的任何代碼片段...

感謝所有幫助

回答

0

這我已經去除了「PHP客戶端庫」,並從混帳「混帳克隆-b V1主https://github.com/google/google-api-php-client.git

下載一套新的和已下載鏈接的autoload.php文件後,問題已得到解決。 ..(「google-api-php-client/src/Google/autoload.php「)

此前我使用Composer來構建它......但現在我根本沒有使用Composer,Google API」PHP Client Library「工作得很好......


我也面臨了新的問題...

第1期)致命錯誤:未捕獲的異常 'Google_Auth_Exception' 有消息 '無法JSON解碼令牌' 在谷歌的API-PHP -client/src/Google/Auth/OAuth2.php'

解決方案:而不是傳遞相關的標記字符串數組,因爲它是傳遞標記字符串... $ client-> setAccessToken($ tokenstring);那麼它就解決了。還要確保json_encode()從$ client-> getAccessToken()返回的字符串; invalid_grant:它存儲在數據庫或文件

第2期)未捕獲的異常「Google_Auth_Exception」有消息「錯誤獲取的OAuth2訪問令牌,消息」:之前的代碼已經被贖回。'

解決方案:以前,當我們調用$ client-> authenticate($ code)時,google api好像將錯誤消息作爲關聯數組返回。但現在它拋出一個錯誤...所以誤差嘗試{}趕上處理()解決了這個問題

問題2)是Firefox的預取功能的源...

火狐試圖打兩次網址對於預取和它提出的例外... 仍試圖克服問題(2)