向OpenID提供者请求电子邮件地址的最简单方法是什么?
有没有一个好的PHP库可以简化此问题?
我知道提供程序的实施方式有所不同.我听说您需要同时进行简单注册和属性交换.我特别想确保它可以与最大的提供商(例如MyOpenID和Google)一起使用.
相关但不足的问题:
> Request email address from OpenID provider(以.NET为中心)
> OpenID Attribute Exchange – should I use it?
解决方法:
JanRain有一个Open ID PHP Library,这是从以OpenID为中心的公司开发的最早的库之一(我相信).您提到使用JanRain的站点MyOpenID.
就是说,我个人现在使用Zend库(几年前我在JanRain库中玩过),只是因为我通常使用Zend Framework进行开发.
如果提供程序使用OpenID简单注册扩展,则下面是一些代码示例.
该section of the Zend Reference指南显示了如何通过身份验证请求来请求用户信息.这是根据您的需求编辑的示例代码:
//require e-mail, get nickname and fullname if available
$sreg = new Zend_OpenId_Extension_Sreg(array(
'nickname'=>false,
'email'=>true,
'fullname'=>false), null, 1.1);
$consumer = new Zend_OpenId_Consumer();
if (!$consumer->login($openid, $returnUrl, null, $sreg)) {
die("OpenID login failed.");
}
使用JanRain库实现相同的过程类似,这是从库包的try_auth.php文件中摘录的一些代码(我对其进行了编辑以显示您正在寻找的基本功能):
$auth_request = $consumer->begin($openid);
$sreg_request = Auth_OpenID_SRegRequest::build(
// Required
array('email'),
// Optional
array('fullname', 'nickname'));
$auth_request->addExtension($sreg_request);
对于属性交换,请查看JanRain Auth_OpenID_AX Classes,在Zend库中有一个feature request for AX support.