2011-05-20 73 views
7

我正在研究一个需要频繁访问Google Data API的Web应用程序,因此我决定使用“OAuth with Federated Login(Hybrid Protocol)”方法让用户登录到应用程序。我获得了http://googlecodesamples.com/hybrid/(经过对PHP 5.3兼容性的一些调整),并且能够获得访问令牌。下一步是什么?我如何使用此访问令牌?持续的Google OpenID + OAuth?

看来我需要为用户创建一个本地会话来浏览应用程序的其余部分。这是否需要完全独立于Google登录,或者您将如何处理?

相关:此应用程序还需要一个REST API,为此我打算使用OAuth。有关如何将其与实际应用程序的身份验证绑定的建议?

回答

8

我正在使用PHP LightOpenID库(see on gitorious)。它为我们处理所有的认证流程。你不需要打扰令牌和东西。

这里,我显示链接“与谷歌登录”页面:

<?php 
require_once 'openid.php'; 
$openid = new LightOpenID; 

$openid->identity = 'https://www.google.com/accounts/o8/id'; 
$openid->required = array('contact/email'); 
$openid->returnUrl = 'http://my-website.com/landing-login.php' 
?> 

<a href="<?php echo $openid->authUrl() ?>">Login with Google</a> 

当链路上的点击,谷歌的页面会出现要求他进行认证和/或授权你找回他的电子邮件。

然后他将重定向到登陆页面$openid->returnUrl。该页面的代码应该是:

<?php 
require_once 'openid.php'; 
$openid = new LightOpenID; 

if ($openid->mode) { 
    if ($openid->mode == 'cancel') { 
     // User has canceled authentication 
    } elseif($openid->validate()) { 
     // Yeah ! 
     $data = $openid->getAttributes(); 
     $email = $data['contact/email']; 
    } else { 
     // The user has not logged in via Google 
    } 
} else { 
    // The user does not come from the link of the first page 
} 
?> 

如果你想要从用户的详细信息,你必须将它们添加到$openid->required在第一页。例如:

$openid->required = array(
    'contact/email', 
    'namePerson/first', 
    'namePerson/last' 
); 

会让你,如果用户接受它,让他的姓和名以及在第二页:

$name = $data['namePerson/first'] . " " . $data['namePerson/last']; 

然后,基于OAuth的认证部分,你可以请按照this LightOpenID issue的说明操作。