Zend Framework OpenID Consumer - PullRequest
       4

Zend Framework OpenID Consumer

2 голосов
/ 28 июля 2010

Я использую Zend_OpenId_Consumer для предоставления доступа OpenID, логин работает нормально, но когда я звоню verify() Я получаю сообщение об ошибке

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

Насколько я вижу, проблема в том, чтометод verify сравнивает URL-адрес без части запроса со всем 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';
    }
}

Я что-то здесь не так делаю?

1 Ответ

1 голос
/ 03 августа 2010

возможно, это полезно

Интеграция с Zend_Controller

Наконец, пара слов об интеграции в приложения Model-View-Controller: такие приложения Zend Framework реализованы с использованием класса Zend_Controllerи они используют объекты класса Zend_Controller_Response_Http для подготовки ответов HTTP и отправки их обратно в веб-браузер пользователя.Zend_OpenId_Consumer не предоставляет никаких возможностей графического интерфейса, но он выполняет HTTP-перенаправления при успешном завершении проверки Zend_OpenId_Consumer :: login и Zend_OpenId_Consumer ::.Эти перенаправления могут работать неправильно или не работать вообще, если некоторые данные уже отправлены в веб-браузер.Для правильного выполнения перенаправления HTTP в коде MVC необходимо отправить реальный Zend_Controller_Response_Http в Zend_OpenId_Consumer :: login или Zend_OpenId_Consumer :: check в качестве последнего аргумента.

zend.openid.consumer

странно, я только что проверил OpenId_Consumer на своем локальном сервере с ZF 1.10.3 ... вообще никаких проблем

мое действие

   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>
...