Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-03-2009 07:58:28

iop974
Membre
Date d'inscription: 27-02-2009
Messages: 72

[Resolu][1.7][zend_auth]problème redirect

Bonjour
J'ai un problème lorsque je redirige la page. si une personne se trompe ou n'entre pas de login.
Si on se connecte tout marche mais s'il y a une erreur je fais des test et je fais un redirect mais cela me retourne sur mon index sans le message d'erreur quelqu'un peut il m'aider svp .
Voici mon loginAction

Code:

public function loginAction()
    {
        $this->view->message = '';
        
        if (!$this->_request->isPost() || !$this->_request->getPost('login') ||!$this->_request->getPost('password')) {
               $this->view->message = 'veuillez entrer un login ou mot de passe';    
        } else {
            // creation de l'authentificateur
            $db        = Zend_Db_Table_Abstract::getDefaultAdapter();
            $dbAdapter = new Zend_Auth_Adapter_DbTable($db, 'user', 'email', 'password', 'MD5(?)');
            
            // passage des parametres a l'authentificateur
            $dbAdapter->setCredential($this->_request->getPost('password'))
                      ->setIdentity($this->_request->getPost('login'));
                      
            // authentification          
            $result = $this->_auth->authenticate($dbAdapter);
            
            // ecriture de l'objet complet en session, sauf le champ password,
            // si l'identification est OK
            if ($result->isValid()) {
                $this->_auth->getStorage()->write($res = $dbAdapter->getResultRowObject(null, 'password'));
    
                $this->_redirect('/');
            } else {
                $this->view->message = 'Login ou mot de passe incorrect';
            }
        }
        $this->_helper->redirector('index', 'index');
     }

et mon loginform

Code:

<form method="post" action="<?php echo $this->baseUrl();?>/login/login">
<?php if(!empty($this->message)) :?>
    <div id="message">
        <?php echo $this->escape($this->message);?>
    </div>
<?php endif; ?>
    <label for='login' >e-mail: </label>
      <input type='text' name='login' id="login" size='5'><br />
    <label for='password' >mot de passe:</label> 
      <input type='password' name='password' id="password" size='5'>
    <input type='submit' name='submit' value='Valider' />
</form>

Dernière modification par iop974 (13-03-2009 08:30:46)

Hors ligne

 

#2 12-03-2009 09:46:46

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Resolu][1.7][zend_auth]problème redirect

lorsque tu fais un redirect la vue n'est pas rendue tout ce que tu as alors mis dans view est perdu

j'utilise un modèle de prog où les redirect sont frequent. je me suis donc fixée comme règle d'ingénierie de ne pas faire 50 chose à la fois.

un action ne fait qu'un traitement atomique.
une action ne peux faire un rendu et une redirection.

j'ai donc des action qui font un redirect et qui donc ne font pas de rendu et n'utilise pas la vue.
et d'autre qui ont un rendu et pas de redirection.

pour ton cas cela ce traduit ainsi

Code:

public function showLoginAction() {
    // cette methode affiche le formulaire de login mais ne le traite pas
}

public function loginAction() {
   //cette action traite le login mais n'affiche rien
  $redirect = 'showLogin';
  if (loginIsOk()) {
      $redirect = '/';
  } else {
      $redirect = 'showLogin';
  }
  $this->_redirect($redirect);
}

voilà pour le principe. reste le pb des messages. pour cela j'utilise la session
dans l'action login je mets mes messages en session dans un name space "messenger".
l'action showLogin récupère les messages s'il y en a et vide le namespace

en fait je mets en place le principe du messenger dans toutes mes action qui font un rendu
ainsi j'ai un comportement homogène et toute action de type redirect peut placer un message dans le messager sans se préoccuper de savoir qui va le consommer.

tu peux lire ça http://sekaijin.ovh.org/?p=29
j'y explique le principe
A+JYT

Hors ligne

 

#3 12-03-2009 10:02:59

iop974
Membre
Date d'inscription: 27-02-2009
Messages: 72

Re: [Resolu][1.7][zend_auth]problème redirect

ok merci beaucoup pour l'info !
Suis aller du coté de la doc et suis tombé sur le flashmessenger et j'ai essayé d'appliquer ce que tu m'as dis et cela marche.

A la place de

Code:

$this->view->message = 'veuillez entrer un login ou mot de passe';

J'ai mis

Code:

$this->_flashMessenger->addMessage('mon message');

bien sur comme écris dans la doc faut l'initialiser avant :

Code:

$this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');

Puis pour adapter ce que tu m'as dis j'ai mis ça dans mon indexAction :

Code:

    public function indexAction()
    {
        $auth=Zend_Auth::getInstance();
        if ($this->_auth->hasIdentity()) {
            $this->view->login = $this->_auth->getIdentity()->firstname;
            $this->render('connecter');
        } else {
            $this->view->message = $this->_flashMessenger->getMessages();
            $this->render('loginform');
        }
    }

Du coup dans mon loginAction, je fais $this->_redirect('/'); et c'est quand il passe dans l'index qu'il affiche le message si mauvaise connexion ou bienvenue si bonne connexion

Je ne sais pas si comme je fais est bien mais ça marche.  Vos avis sont les bienvenues smile

Merci

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