2010-07-28 7 views
2

J'utilise le Zend_OpenId_Consumer pour fournir un accès OpenID, la connexion fonctionne bien, mais quand je l'appelle verify() Je RECEVOIR l'erreurZend Framework qu'OpenID Consumer

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

La question de ce que je peux voir que la méthode de vérification compare l'URL sans la partie de requête à l'URL entière qui inclut toutes les informations de réponse OpenID. Il obtient cette URL de Zend_OpenId::selfUrl()

J'utilise verify le code dans le doc pages

$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'; 
    } 
} 

que je fais quelque chose qui cloche?

Répondre

1

peut-être cela est utile

Intégration avec Zend_Controller

Enfin quelques mots sur intégration dans Model-View-Controller applications: telles Zend Framework applications sont mises en œuvre en utilisant la classe Zend_Controller et ils utilisent objets de la classe Zend_Controller_Response_Http à préparer les réponses HTTP et les envoyer retour au navigateur Web de l'utilisateur. Zend_OpenId_Consumer ne fournit pas toutes les fonctionnalités de l'interface graphique, mais il effectue HTTP sur le succès de redirections Zend_OpenId_Consumer de login et Zend_OpenId_Consumer de chèque. Ces redirections peuvent ne pas fonctionner correctement ou pas du tout si certaines données étaient déjà envoyées au navigateur Web. Pour bien effectuer la redirection HTTP dans le code MVC le vrai Zend_Controller_Response_Http doivent être envoyées à :: connexion Zend_OpenId_Consumer ou Zend_OpenId_Consumer :: vérifier que le dernier argument .

zend.openid.consumer

étrange, je viens de tester sur mon OpenId_Consumer localserver avec ZF 1.10.3 ... aucun problème

mon action

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"; 
     } 
     } 
    } 

mon avis

<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> 
+0

T Rings pour cela, pas de chance malheureusement. J'ai juste essayé de passer l'objet de réponse dans la méthode de connexion mais le problème semble toujours être dans la méthode de vérification. –

+0

Merci pour l'édition, quelle version de PHP utilisez-vous? –

+0

PHP 5.3.2 et ZF 1.10.3 – teemitzitrone