2010-07-13 45 views
5

我感到困惑。使用... openid获取Gmail地址? OAuth的?

我能够使openid登录有点工作使用LightOpenID

我所做的只是一个openid_identity,如“https://www.google.com/accounts/o8/id?id=xxx”。相当令人失望:我也希望获得电子邮件地址。

我需要登录(这就是OpenID的那样)知道谷歌的电子邮件地址,帐户使用的登录用户。

有函数$openid->getAttributes()但我从中得到的只是一个空的数组:我猜谷歌不会给我以外的东西openid_identity

所以我我应该使用OAuth,对不对? 我对此毫无头绪。 我只发现了可怕的和困惑的文件,要么假装解释一切(我意味着一切),或者不说明什么

是的,当然,我试图看看以前的文章,就像我在谷歌上搜索一样。请再读一遍上面的段落。

+0

请看看我的问题(可能对你有用的)位置:http://stackoverflow.com/questions/2667447/how-to-use-the-correct-google-openid-url-to-login -to-我的站点 所以基本上,据我所知,这是它的方式是如何进行的OpenID在Gmail中,你不能表现力有你的Gmail地址作为您的OpenID – 2010-07-13 23:06:11

+0

感谢的一部分。如果这是我们回到问题的第二部分:'OAuthWTF'? – 2010-07-13 23:09:57

回答

10

我刚刚发现LightOpenID我觉得这很棒。我已经成功使用的example-gmail.php以下修改获得的电子邮件地址,姓氏和名字和喜欢的语言:

<?php 

require_once('openid.php'); 

if (empty($_GET['openid_mode'])) 
{ 
    if (isset($_GET['login'])) 
    { 
     $openid = new LightOpenID(); 
     $openid->identity = 'https://www.google.com/accounts/o8/id'; 
     $openid->required = array('namePerson/first', 'namePerson/last', 'contact/email', 'pref/language'); 

     header('Location: ' . $openid->authUrl()); 
     //header('Location: ' . str_replace('&amp;', '&', $openid->authUrl())); 
    } 

    else 
    { 
     echo '<form action="?login" method="post">' . "\n"; 
     echo '<button>Login with Google</button>' . "\n"; 
     echo '</form>' . "\n"; 
    } 
} 

else if ($_GET['openid_mode'] == 'cancel') 
{ 
    echo 'User has canceled authentication!'; 
} 

else 
{ 
    $openid = new LightOpenID(); 

    echo 'User ' . ($openid->validate() ? $_GET['openid_identity'] . ' has ' : 'has not ') . 'logged in.'; 

    echo '<pre>'; 
    print_r($openid->getAttributes()); 
    echo '</pre>'; 
} 

?> 

我改变了代码,使其一点点的可读性,输出:

User https://www.google.com/accounts/o8/id?id=*** has logged in. 

Array 
(
    [namePerson/first] => Alix 
    [contact/email] => ***@gmail.com 
    [pref/language] => en 
    [namePerson/last] => Axel 
) 

我仍然无法从Google获取邮政编码和其他人,但我已成功使用myOpenID.com

+0

谢谢,但我的问题是:我可能会问'required'属性的列表在哪里?我只能找到'openix.ax.wtf'列表,但我不知道如何在LightOpenID中使用它们:/ – 2010-07-14 10:22:38

+0

哦,这里是 - > http://www.axschema.org/types/...仍然,有没有办法问谷歌哪些领域将出口?或者只是尝试一下,有些会工作,有些则不会? – 2010-07-14 10:26:31

+0

LightOpenID是否存储您在'if(isset($ _ GET ['login']))'中所做的请求?它似乎没有,但它应该(出于性能原因)。对于Google来说,它是无关紧要的,但如果用户提供的标识符(USI)是声明的标识符(CI),则可能不是。假设你输入myusername.myopenid.com。在该URL的发现阶段,您会发现对该标识符进行权威响应的端点url。如果您不保存该信息,则在第二阶段中,您必须再次检查端点是否拥有CI的权限。 – Artefacto 2010-07-14 10:30:01

1

拥有Google帐户并不意味着您会获得一个Gmail帐户。 You can start a Google account with any email address

话虽如此,我不认为其规范的一部分返回电子邮件地址或登录数据作为身份的一部分。

+1

好点。我想获得*那*电子邮件地址,如果它不是gmail,则无关紧要。 – 2010-07-13 23:11:36

5

可以使用的OpenID的属性交换。请参阅Google文档here(特别是openid.ax.type.email)。

+1

太棒了!虽然我无法理解如何将诸如'openid.ax.type.email'之类的属性映射到LightOpenID的不同的属性('contact/email'),知道它可以被完成,但我更深入了解LightOpenID的文档,我设法做到这一点:)谢谢 – 2010-07-14 10:20:29

相关问题