2011-05-05 18 views
1

我目前正在開發一個基於網絡的郵件服務(它不是一個郵件客戶端,但需要解釋很多)。然而,在此之前,我從未與oauth合作過,但似乎要走的路,我已將我的簡單課程放在sampel code上。但是,示例代碼在多次登錄時不提供解決方案,或者我錯過了它。Google Oauth IMAP每次都要求獲得許可

所以基本上我的問題是,每次我登錄時,我需要再次授權給gmail,而我已經看到了其他服務,在此之後,您只需登錄並立即重新導向而無需再次接受。

編輯:爲了澄清,我使用oauth登錄和IMAP,這是愚蠢的?我雖然這是最好的方式,因爲看起來很奇怪,當我所有的應用程序都是通過oauth關注Google應用程序imap時,OpenID和oauth都連接到同一個用戶。我認爲tungle.me就是這樣工作的,因爲我只需要授權一次,下一次Google即時將我重定向回來,我希望我的應用能夠以這種方式工作。

編輯2:經過進一步的搜索,似乎授權是第一次,然後我應該使用認證,因爲英語不是我的第一語言,我雖然他們意味着同樣的事情。所以問題在於,當已經創建帳戶的用戶再次登錄時,如何使用Google進行身份驗證,以便我無需每次都生成新的令牌。

回答

0

使用google API,您可以將1次驗證cookie變成永久驗證cookie。如果您將此新的永久身份驗證cookie存儲在數據庫中或某處,則可以將其用於該特定用戶,而不是每次都生成新的身份驗證cookie。

事情是這樣的:

$client = new Zend_Gdata_HttpClient(); 
$client->setAuthSubPrivateKeyFile('key.pem', null,false); 
$uri = Zend_Gdata_AuthSub::getAuthSubTokenUri($next, $scope, $secure, $session) 
$gCalToken = Zend_Gdata_AuthSub::getAuthSubSessionToken(trim($uri),$client); 
+0

所以當我存儲這個cookie並且用戶再次登錄時(我使用相同的oauth進行登錄,所以我不需要密碼)我該如何處理?我的計劃是序列化AccessTooken並存儲在數據庫中。 – Hultner 2011-05-05 08:51:21

+0

是的,一旦以第二種形式保存了令牌,您應該能夠將其從數據庫中提取出來並在沒有任何用戶交互的情況下再次使用它。 – jberg 2011-05-05 09:02:55

+0

但是,當用戶登錄之前,我應該調用什麼?我應該再次調用這些方法嗎?我目前使用Zend_Oauth_Consumer對象。 – Hultner 2011-05-05 13:23:15

5
require_once './oauth/apiClient.php'; 
require_once './oauth/contrib/apiPlusService.php'; 
$client = new apiClient(); 
$client->setApplicationName("Name"); 
$client->setScopes(array('https://www.googleapis.com/auth/plus.me')); 
$client->setApprovalPrompt (auto); 

...最後一個可以解決問題,因爲默認情況下apiClient套approval_prompt 「逼」

希望這可以幫助別人

+0

感謝這個......它只是工作!.. :) – whizzzkid 2012-11-29 03:42:18

+0

謝謝托馬斯,也爲我工作。 – 2012-12-14 10:46:30

相關問題