1

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

4

1 回答 1

0

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

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

属性交换是 Zend Framework 中需要的另一件事。

相关问题在这里

于 2011-12-19T17:44:47.017 回答