在使用 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。如果我先验证(),然后验证()返回 Zend_Auth_Result::FAILURE。查看 Zend/Auth/Adapter/OpenId.php 中的代码,很明显 authenticate() 在内部调用 verify(),这是有道理的。但是,此内部调用填充的 SREG 值不会通过我能看到的任何方式公开。我错过了什么?
(在键入此内容并进行试验时,我发现我可以从 $_GET 中获取 SREG 值,例如 $_GET['openid_sreg_email'],但这似乎不是预期的模式。它解决了我的问题,但是我仍然想知道是否有更官方的解决方案。)