Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-12-2008 12:40:11

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

Problème d'affichage de message - Redirection après authetification

Bonjour
Pour protéger l'accès à certaines pages j'ai intégré une fonction predispatch() dans chaque contrôleur (truc classique):

Code:

    function preDispatch()
    {
    
    $auth = Zend_Auth::getInstance();
    if (!$auth->hasIdentity()) {
        $this->_redirect('auth/login');
        $this->view->message='Vous n\'êtes pas autorisés à accéder à cette page.<br>'
                            .'Veuillez vous authentifier.';
    }
    
    }

A chaque fois, que l'utilisateur accède à cette page et qu'il n'est pas authentifié, il est redirigé vers la page de login avec l'affichage d'un message. Malheureusement, ce message ne s'affiche pas.
Je voudrais également pouvoir rediriger l'utilisateur vers la page demandée après son authentification mais je ne sais pas comment faire.

Dans mon fichier login.phtml j'ai :

Code:

<?php if(!empty($this->message)) :?>
<div id="message">
<?php echo $this->escape($this->message);?>
</div>
<?php endif; ?>
<form action="<?php echo $this->baseUrl ?>/auth/login" method="post">
....

</form>

Merci

Hors ligne

 

#2 05-12-2008 13:05:30

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Problème d'affichage de message - Redirection après authetification

Hello,

C'est normal, tu n'es plus dans le même contexte de requête HTTP après un redirection donc $this->view->message n'existe plus.

Regardes l'helper FlashMEssenger pour faire transiter des messages entre tes requêtes

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 05-12-2008 15:13:50

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

Re: Problème d'affichage de message - Redirection après authetification

J'ai changé mon code ainsi :
Dans la page à protéger :

Code:

    function preDispatch()
    {
    
    $auth = Zend_Auth::getInstance();
    if (!$auth->hasIdentity()) {
        $this->_redirect('auth/login');
        AuthController::getHelper('FlashMessenger')->addMessage('YOU R NOT LOGGED IN');
        
    }
    
    }

Ensuite dans mon loginAction

Code:

    public function loginAction() {
        
    $this->view->message = $this->getHelper('FlashMessenger')->getMessages();
....
}

ça ne marche pas?

Excusez mon ignorance!
But,Where is l'erreur?!!!

Dernière modification par ziedb (05-12-2008 15:14:57)

Hors ligne

 

#4 05-12-2008 16:30:54

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Problème d'affichage de message - Redirection après authetification

Hello,

A vue de nez, j'aurais mis le message avant le redirect.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#5 10-12-2008 12:55:42

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

Re: Problème d'affichage de message - Redirection après authetification

J'ai crée un plugin MyAuthPlugin et un contrôleur d'authentification extrait d'un tuto sur developpez.com.
Pour implifier le problème, si considère un seul contrôleur 'index' et une seule action 'index'.
Si j'essaie d'accéder à cette page et que je ne suis pas authentifié, je suis redirigé vers /auth/login.
Si le login se passe bien, je suis redirigé vers monsite/index/index/.
Firefox m'indique un message 'Firexfox a détecté que cette requête n'aboutira pas' et dans la bare d'adresse je trouve une url du type 'mosite/auth/auth/auth/auth/auth/auth...'

Par contre quand j'ai changé la fonction preDispatch() par dispatchLoopStartup() tout marche bien.
Est-ce que quelqu'un peut m'expliquer le phénomène? Si j'ai des erreurs dans mon code, lesquels?
Merci

Code:

/**
 *AuthController.php
 *
 */
    public function loginAction() {
        
        $this->view->message = '';
        if ($this->_request->isPost()) {
                ....
        $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->view->message='Login OK';
        $this->_redirect('/');
        } else {
        // failure: clear database row from session
        $this->view->message = 'Login failed.';
        }
        }
        }
        
        ....
        }
    

    }

Code:

require_once 'Zend/Loader/PluginLoader.php';

/**
 * MyAuthPlugin.php
 *
 */
class MyAuthPlugin extends Zend_Controller_Plugin_Abstract
{



    public function __construct(){
        

    }

    public function predispatch (Zend_Controller_Request_Abstract $requete)
    
    {
        $auth = Zend_Auth::getInstance();
        if (!$auth->hasIdentity() && !($requete->getControllerName() == 'auth' && $requete->getActionName()=='login' && $requete->getModuleName() == 'default')) 
        {
               $front      = Zend_Controller_Front::getInstance();
            $response   = $front->getResponse();        
            $response->setRedirect('auth/login');           
            $response->sendHeaders();            
            exit;
        }  

          
    }
}

Hors ligne

 

#6 10-12-2008 16:46:04

mdelanno
Membre
Lieu: Nord
Date d'inscription: 26-08-2007
Messages: 90
Site web

Re: Problème d'affichage de message - Redirection après authetification

ziedb a écrit:

Code:

   
$response->setRedirect('auth/login');

Manquerait pas un / ?

Code:

$response->setRedirect('/auth/login');

J'ai jamais utilisé dispatchLoopStartup, mais je suis pas sur que l'action y soit correctement initialisée. Ce qui expliquerai que ça fonctionne.

Dernière modification par mdelanno (10-12-2008 16:56:01)

Hors ligne

 

#7 10-12-2008 16:51:17

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Problème d'affichage de message - Redirection après authetification

Perso, je ne fais pas de redirect.. je change juste le module/controller/action demandé.

Une sorte de forward..

Sinon, pour le changement de comportement, c'est simple
Dans DispatchLoopStartup, tu n'y passes qu'une fois par execution.
preDispatch, tu passes à chaque action que tu dispatches


----
Gruiiik !

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