2011-05-05 113 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