我使用lightopenid作为网站的登录系统,登录成功后,我需要用户的详细信息,如他的名字,姓氏,电子邮件和出生日期。
如何从他的openid中获取此信息?假设谷歌,我使用身份验证网址:https://www.google.com/accounts/o8/id
然后在validate()方法返回1之后,我将用户重定向到我站点中的另一个页面。但是如何在登录后获取用户的详细信息?
仅供参考,我正在使用openid for google,yahoo和aol。 对于Facebook,我使用图形api和twitter,我正在使用twitter oauth。有没有办法用这些获取用户数据?请建议。
答案 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”数据。但是,只有用户同意,我才会希望。