Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
salut ,
pour un raison de securité , je dois verifier avant l'execution de n'importe quel controleur la validité de l'utilisateur , alors si l'utilisateur demande directement le lien il doit l'afficher seulement si l'utilisateur est bien "logged" .
pourcela en suivant un tuto j'implémente la fonction preDispatch comme ceci :
function preDispatch()[ { $auth = Zend_Auth::getInstance(); if (!$auth->hasIdentity()) { $this->_redirect('/'); } }
si le "$this->_redirect('/');" est en commentaire tout va bien
sinon le navigateur affiche ce message :
L'adresse a été redirigée vers .Veuillez cliquer sur le lien pour y aller.
merci d'avance
Dernière modification par oswalidos (24-07-2009 22:12:15)
Hors ligne
L'adresse a été redirigée vers .Veuillez cliquer sur le lien pour y aller.
En général, quand tu as ce message, c'est que ton code rentre dans une "redirection infinie". Le navigateur le détecte et te l'indique comme cela.
Essaye autre chose que un redirect pour voir si ta connexion s'effectue correctement. Peut être que ce code s'execute avant ton processus de login (si c'est dans un plugin en preDispatch, lorsque tu accèdes à l'action de login, tu es redirigé comme sur les autres pages, d'où ta redirection qui boucle ) ?
Hors ligne
Mr.MoOx a écrit:
Peut être que ce code s'execute avant ton processus de login (si c'est dans un plugin en preDispatch, lorsque tu accèdes à l'action de login, tu es redirigé comme sur les autres pages, d'où ta redirection qui boucle ) ?
desolé pouvez vous detailler cette phrase car j'ai pas bien compris .
j'ai mis pour le moment un seul controleur juste pour simplifier la tache .
quelques bouts de code :
function preDispatch() { $auth=Zend_Auth::getInstance(); if ($auth->hasIdentity()) echo $auth->getIdentity()->username; else $this->_redirector->gotoSimple('index','index'); //c'est là le probleme }
public function indexAction() { $this->view->title = "Authentification"; $this->view->headTitle($this->view->title, 'PREPEND'); $form = new Form_Authentification(); $form->submit->setLabel('Authentification'); $this->view->form = $form; if ($this->getRequest()->isPost()) { $formData = $this->getRequest()->getPost(); if ($form->isValid($formData)) { $login = $form->getValue('login'); $password = $form->getValue('password'); $registry = Zend_Registry::getInstance(); $db = $registry->get('dbAdapter'); $authAdapter = new Zend_Auth_Adapter_DbTable($db); $authAdapter->setTableName('users'); $authAdapter->setIdentityColumn('username'); $authAdapter->setCredentialColumn('password'); // Set the input credential values to authenticate against $authAdapter->setIdentity($login); $authAdapter->setCredential($password); // do the authentication $auth = Zend_Auth::getInstance(); $result = $auth->authenticate($authAdapter); if ($result->isValid()) { // success: store database row to auth's storage // system. (Not the password though!) $data = $authAdapter->getResultRowObject(null,'password'); $auth->getStorage()->write($data); $this->_redirector->gotoSimple('admin','index'); } else { // failure: clear database row from session $this->view->message = 'Login failed.'; } } else { $form->populate($formData); } } $this->view->user= Zend_Auth::getInstance()->getIdentity(); }
public function adminAction() { $this->view->title = "espace admin"; $this->view->headTitle($this->view->title, 'PREPEND'); $albums = new Model_DbTable_Albums(); $this->view->albums = $albums->fetchAll(); }
index.phtml
<?php echo $this->form ;?>
Dernière modification par oswalidos (21-07-2009 12:24:53)
Hors ligne
Ta méthode preDispath() s'execute dans un plugin si je ne me trompe pas.
Et donc elle est appellé avant toutes les actions, y compris l'action où tu tente de loggé ton user. Il ne pourra donc jamais être loggé car il sera toujours redirigé sur une l'action de login, qui elle même redirige car passe par le preDispath avant l'action elle même... et ainsi de suite, d'où ta boucle infini.
Hors ligne
ceci peut vous aider peut être
http://julien-pauli.developpez.com/tuto … ps-plugin/
Hors ligne
Mr.MoOx a écrit:
Ta méthode preDispath() s'execute dans un plugin si je ne me trompe pas.
Et donc elle est appellé avant toutes les actions, y compris l'action où tu tente de loggé ton user. Il ne pourra donc jamais être loggé car il sera toujours redirigé sur une l'action de login, qui elle même redirige car passe par le preDispath avant l'action elle même... et ainsi de suite, d'où ta boucle infini.
merci,
en fait ce n'est pas un plugin ,c'est le predispatch() du controleur index ,mais je crois c'est le meme probleme , l'utilisateur ne pourra jamais so logger , une redirection invoque une autre et ainsi de suite ,d'où comme vous avez dit une boucle infinie .
la solution si j'ai bien compris est :
d'implementer un plugin qui ne fait pas de redirection mais il change la requete avec $request->setControllerName() etc.
merci zied pour le lien
Dernière modification par oswalidos (24-07-2009 22:14:07)
Hors ligne
Pages: 1