使用Zend_Auth和OpenID获取SREG数据

时间:2011-01-18 06:29:34

标签: php zend-framework openid sreg

使用Zend_Auth_Adapter_OpenId时,我无法弄清楚如何获取SREG扩展值。我正在关注这些文档页面:
http://framework.zend.com/manual/en/zend.auth.introduction.html
http://framework.zend.com/manual/en/zend.openid.consumer.html

在Zend_Auth的文档中,它说当使用OpenID对authenticate()进行第二次调用时,如下所示:

$auth_result = $auth->authenticate(new Zend_Auth_Adapter_OpenId());

这样可行,$ auth_result最终为Zend_Auth_Result :: SUCCESS。

但是,在Zend_OpenId_Consumer文档中,为了获得返回的SREG数据,它说要执行此操作:

$sreg = new Zend_OpenId_Extension_Sreg(array('email'=>false,'fullname'=>false), null, 1.1);
$consumer = new Zend_OpenId_Consumer();
$consumer->verify($_GET, $id, $sreg);

这也有效,因为verify()返回true而$ sreg-> getProperties()返回我请求的SREG字段。

问题是我不能做这两件事!如果我先调用authenticate(),那么verify()将返回false。如果我首先验证(),则authenticate()返回Zend_Auth_Result :: FAILURE。查看Zend / Auth / Adapter / OpenId.php中的代码,很明显authenticate()在内部调用verify(),这是有道理的。但是,此内部调用填充的SREG值不会通过我能看到的任何方式公开。我错过了什么?

(在输入和试验时我发现我可以从$ _GET中获取SREG值,例如$ _GET ['openid_sreg_email'],但这似乎不是预期的模式。它解决了我的问题问题,但我仍然想知道是否有更正式的解决方案。)

1 个答案:

答案 0 :(得分:0)

Zend官方不支持OpenID 2.0和Google OpenID提供商。但是问题跟踪器中有一个补丁。这是该补丁的link。您必须从该站点替换Consumer.php。应用此补丁后,OpenID应与Google和其他主要提供商(如Yahoo!)合作。

谈到OP,从OpenID结果获得SREG,GET参数没有这样的标准。这已在StackOverflow here和Meta StackOverflow here中讨论过一次。

Attribute Exchange是Zend Framework中需要的另一件事。

相关问题here