使用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'],但这似乎不是预期的模式。它解决了我的问题问题,但我仍然想知道是否有更正式的解决方案。)
答案 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。