从openid获取用户详细信息

时间:2010-12-27 17:19:34

标签: php facebook twitter openid

我使用lightopenid作为网站的登录系统,登录成功后,我需要用户的详细信息,如他的名字,姓氏,电子邮件和出生日期。

如何从他的openid中获取此信息?假设谷歌,我使用身份验证网址:https://www.google.com/accounts/o8/id

然后在validate()方法返回1之后,我将用户重定向到我站点中的另一个页面。但是如何在登录后获取用户的详细信息?

仅供参考,我正在使用openid for google,yahoo和aol。 对于Facebook,我使用图形api和twitter,我正在使用twitter oauth。有没有办法用这些获取用户数据?请建议。

4 个答案:

答案 0 :(得分:5)

阅读手册: http://code.google.com/p/lightopenid/wiki/GettingMoreInformation

$openid->required = array('namePerson/friendly', 'contact/email');
$openid->optional = array('namePerson/first');
在调用$ openid-> authUrl()之前

然后

$openid->validate();
$userinfo = $openid->getAttributes();
$email = $userinfo['contact/email'];
$firstName = $userinfo['namePerson/first'];

答案 1 :(得分:1)

您需要添加一个参数以指定您还希望从OpenID请求接收数据。

我将以下内容附加到我的OpenID请求中以获取电子邮件详细信息。

&openid.ns.ax=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0&openid.ax.mode=fetch_request&openid.ax.type.email=http://axschema.org/contact/email&openid.ax.required=email

第一部分指定用于扩展数据的命名空间。

第二部分指定我们正在对数据进行获取请求。

第三部分指定我们用于电子邮件的架构。

最后一部分是指定我们要求退回电子邮件。

我已经通过Google对此进行了测试,但效果很好。我没有其他帐户,所以没有对它们进行测试。

OAuth和Facebook Graph API将有自己的格式,所以我不确定那些。

答案 2 :(得分:1)

$openid->identity = 'https://www.google.com/accounts/o8/';

// use the following line to obtain the required details. These are the only details that google mail provides. 
$openid->required = array('namePerson/friendly', 'contact/email' , 'contact/country/home', 'namePerson/first', 'pref/language', 'namePerson/last');

header('Location: ' . $openid->authUrl());

答案 3 :(得分:0)

貌似lightopenid提供了一种方法:

$openid->validate();
$userinfo = $openid->getAttributes();  // associative array

返回SimpleReg或“Attribute Exchange”数据。但是,只有用户同意,我才会希望。