Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 20-07-2009 22:21:06

oswalidos
Membre
Date d'inscription: 12-07-2009
Messages: 39

[résolu][Version 1.8] redirection plante l'application

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 :

Code:

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 smile

Dernière modification par oswalidos (24-07-2009 22:12:15)

Hors ligne

 

#2 21-07-2009 09:08:55

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [résolu][Version 1.8] redirection plante l'application

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

 

#3 21-07-2009 12:24:23

oswalidos
Membre
Date d'inscription: 12-07-2009
Messages: 39

Re: [résolu][Version 1.8] redirection plante l'application

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 :

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
    }

Code:

    
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();
    }

Code:

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

Code:

<?php echo $this->form ;?>

Dernière modification par oswalidos (21-07-2009 12:24:53)

Hors ligne

 

#4 22-07-2009 14:00:12

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [résolu][Version 1.8] redirection plante l'application

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

 

#5 22-07-2009 15:09:32

ziedb
Membre
Lieu: Tunis
Date d'inscription: 24-03-2008
Messages: 224

Re: [résolu][Version 1.8] redirection plante l'application

Hors ligne

 

#6 24-07-2009 16:32:11

oswalidos
Membre
Date d'inscription: 12-07-2009
Messages: 39

Re: [résolu][Version 1.8] redirection plante l'application

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 smile

Dernière modification par oswalidos (24-07-2009 22:14:07)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages