Php 使用Zend_Auth和OpenID获取SREG数据

Php 使用Zend_Auth和OpenID获取SREG数据,php,zend-framework,openid,sreg,Php,Zend Framework,Openid,Sreg,我不知道在使用Zend_Auth_Adapter_OpenId时如何获取SREG扩展值。我正在关注这些文档页面: 在Zend_Auth的文档中,它说当使用OpenID对authenticate()进行第二次调用时,如下所示: $auth_result = $auth->authenticate(new Zend_Auth_Adapter_OpenId()); 这是可行的,$auth_result最终成为Zend_auth_result::SUCCESS 然而,在Zend_OpenId

我不知道在使用Zend_Auth_Adapter_OpenId时如何获取SREG扩展值。我正在关注这些文档页面:

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

$auth_result = $auth->authenticate(new Zend_Auth_Adapter_OpenId());
这是可行的,$auth_result最终成为Zend_auth_result::SUCCESS

然而,在Zend_OpenId_消费者文档中,为了获取返回的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值不会通过我所看到的任何方式公开。我错过了什么


(在键入此项并进行实验时,我发现我可以从$\u-GET中获取SREG值,例如$\u-GET['openid\u-SREG\u-email'],但这似乎不是预期的模式。它解决了我的问题,但我仍想知道是否有更正式的解决方案。)

Zend官方不支持OpenID2.0和Google OpenID提供商。但问题追踪器提供了一个补丁。这是该补丁的最新版本。您必须从该站点替换Consumer.php。应用此修补程序后,OpenID应与谷歌和其他主要提供商(如雅虎)合作

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

是Zend框架中需要的另一件事


相关问题。

你找到解决方法了吗?只是因为我放弃了使用Zend。janrain OpenID库的用户友好性稍差,但它a)支持OpenID2.0,B)实际上可以工作。