【问题标题】:Zend Framework OpenID ConsumerZend 框架 OpenID 消费者
【发布时间】:2010-07-28 15:43:22
【问题描述】:

我正在使用 Zend_OpenId_Consumer 提供 OpenID 访问,登录工作正常,但是当我调用 verify() 时,我收到了错误

`Wrong openid.return_to 'http://[host]/user/openid' != 'http://[host]/user/openid?[OpenIdResponse]

据我所知,问题在于验证方法是将不带查询部分的 URL 与包含所有 OpenID 响应信息的整个 URL 进行比较。它从Zend_OpenId::selfUrl()获取此网址

我正在使用文档页面中的验证码

$consumer = new Zend_OpenId_Consumer();

if($this->_request->getParam('openid_mode')) {

    $id = $this->_request->getParam('openid_claimed_id');

    if($this->_request->getParam('openid_mode') == 'id_res') {

        if($consumer->verify($this->_request->getParams(),$id)) {
            $status = 'VALID ' . $id;
        }
        else {
               $status = 'INVALID ' . $id;
        }

    }
    elseif($this->_request->getParam('openid_mode') == 'cancel') {
       $status = 'CANCELLED';
    }
}

我在这里做错了吗?

【问题讨论】:

    标签: php zend-framework openid


    【解决方案1】:

    也许这有帮助

    与 Zend_Controller 集成

    最后说几句 集成到模型-视图-控制器 应用:如 Zend Framework 应用程序是使用实现 Zend_Controller 类,他们使用 的对象 Zend_Controller_Response_Http 类 准备 HTTP 响应并发送它们 返回到用户的网络浏览器。 Zend_OpenId_Consumer 不提供 任何 GUI 功能,但它执行 成功时的 HTTP 重定向 Zend_OpenId_Consumer::login 和 Zend_OpenId_Consumer::检查。这些 重定向可能无法正常工作或 如果某些数据已经存在,则根本不会 发送到网络浏览器。要正确 在 MVC 代码中执行 HTTP 重定向 真正的 Zend_Controller_Response_Http 应该发送到 Zend_OpenId_Consumer::login 或 Zend_OpenId_Consumer::check 作为 最后一个参数。

    zend.openid.consumer

    奇怪,我刚刚使用 ZF 1.10.3 在我的本地服务器上测试了 OpenId_Consumer... 完全没问题

    我的行动

       public function openidAction() {
          $this->view->status = "";
          if ($this->getRequest()->isPost()) {
             $consumer = new Zend_OpenId_Consumer();
             if (!$consumer->login($this->getRequest()->getParam('openid_identifier'))) {
                $this->view->status = "OpenID login failed.";
             }
          } else if ($this->getRequest()->getParam('openid_mode')) {
             if ($this->getRequest()->getParam('openid_mode') == "id_res") {
                $consumer = new Zend_OpenId_Consumer();
                if ($consumer->verify($this->getRequest()->getParams(), $id)) {
                   $this->view->status = "VALID " . htmlspecialchars($id);
                } else {
                   $this->view->status = "INVALID " . htmlspecialchars($id);
                }
             } else if ($_GET['openid_mode'] == "cancel") {
                $this->view->status = "CANCELLED";
             }
          }
       }
    

    我的观点

    <p><?php echo "{$this->status}" ?></p>
    <form method="post">
       <fieldset>
          <legend>OpenID Login</legend>
          <input type="text" name="openid_identifier" value=""/>
          <input type="submit" name="openid_action" value="login"/>
       </fieldset>
    </form>
    

    【讨论】:

    • 谢谢你,遗憾的是没有运气。我刚刚尝试将响应对象传递给登录方法,但问题似乎仍然存在于验证方法中。
    • 我只使用 5.2.5 和 1.10.3。我不认为它有什么不同,但这可能是问题所在。我对你的行为和形式也有同样的看法,我当地的环境一定有问题。我会在另一台机器上试试。
    猜你喜欢
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多