Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
(Voir mon dernier message num 8 pour le code)
Bonjour,
J'ai suivi tout le tutorial de Rob Allen sur le site suivant:
http://akrabat.com/zend-auth-tutorial/
Je l'ai un peu modifié à ma sauce mais j'ai un petit souci pour afficher un message d'erreur quand l'authentification ne se fait pas (login ou mot de passe incorrect).
public function indexAction()
{
$form = new Application_Form_Login();
$request = $this->getRequest();
if ($request->isPost()) {
if ($form->isValid($request->getPost())) {
if ($this->_process($form->getValues())) {
// We're authenticated! Redirect to the home page
$this->_helper->redirector('index', 'index');
}
else{
//le message d'erreur doit être ici?!
}
}
}
$this->view->form = $form;
}
Dans un premier temps j'ai fait un simple echo mais je dois avoir cette ligne pour un probleme JS dans mon formulaire:
$this->_helper->redirector('index', 'index');
du coup le echo n'affiche plus rien.
J'ai tenté d'utilisé flashmessenger sans succès.
Quelqu'un a une idée?
Dernière modification par bandit_rouge (04-09-2010 14:53:41)
Hors ligne
Bonjour,
Je pense que tu peux mettre le message d'erreur dans une variable de vue :
... $this->view->messageErreur = "Mon message"; ...
puis dans ta vue tu l'affiche si il existe.
Dede
Hors ligne
merci pour la réponse qui pourrais fonctionner si je n'utilisais pas cette ligne de code:
$this->_helper->redirector('index', 'index');
du coup cela n'affiche pas le message d'erreur!
une autre idée?
En fait j'essaye d'avoir mes textbox 'login' et 'password' déjà pré-remplis pour éviter d'avoir le label avant mes textbox dans mon formulaire d'authentification.
// ajouter un élément: email
$this->addElement('text', 'email', array(
'filters' => array('StringTrim', 'StringToLower'),
'validators' => array(
array('StringLength', true, array(0, 50))
),
'required' => true,
'value' => 'Email',
'onfocus' => 'javascript:this.value = "";'
));
// ajouter un élément: password
$this->addElement('text', 'password', array(
'filters' => array('StringTrim'),
'validators' => array(
array('StringLength', true, array(0, 50)),
),
'required' => true,
'value' => 'Mot de passe..',
'onfocus' => 'javascript:this.value = "";this.type="password";'
));
j'ai bidouillé un truc en JS.
Mais mon premier souci c'est que le mot de passe apparait en clair si le login échoue!
Donc j'ai réglé ce problème en utilisant la ligne de code
$this->_helper->redirector('index', 'index');
qd l'authentification échoue.
Un piste?
Dernière modification par bandit_rouge (30-08-2010 19:58:48)
Hors ligne
Je pense que c'est normale que ton mot de passe apparaisse en clair, tu utilise un élément "text", tu devrais peut être utiliser l'élément "password":
$this->addElement('password', 'password'...
Et dans ce cas plus besoin de redirection ni de js pour cacher ton mot de passe ?
nb : J'ai jeter un oeil sur le tutoriel et il redirige lorsque l'authentification est réussit et non lors de l'échec. De plus il utilise bien un élément "password" pour son formulaire.
En procedant de la sorte tu pourra utiliser :
... $this->view->message = "pour le message d'erreur"; ....
et ne pas avoir besoin de js pour cacher le mot de passe
Dernière modification par Dede (31-08-2010 09:27:20)
Hors ligne
mais le problème avec un élément de type password c'est que la value n'apparait pas (ou apparait mais en crypté) donc j'ai un textbox sans rien! c'est pour ca que je le met en type texte!
une autre suggestion?
Dernière modification par bandit_rouge (31-08-2010 10:59:46)
Hors ligne
Si tu veux réinitialisé ton PWD sur un echec :
$form->getElement('password)->setValue('Mot de passe...'); //juste avant le $this->view->form = $form;
Celui du formulaire devient donc inutile puisque tu set la valeur avant de l'envoyer dans la variable de vue
Du coup plus besoin de redirection et tu peux donc afficher ton message d'erreur "normalement".
Sinon tu redirige avec un paramètre:
echec = 1;
et tu test le paramètre pour afficher, ou non, l'erreur
Perso rediriger sur le même controler/action je ne suis pas fan
Hors ligne
Pour le message : flash messenger (voir : http://framework.zend.com/manual/fr/zen … lpers.html)
Hors ligne
Nickel Dédé!
Grâce à toi mon problème est résolu!!!
Alors petit récap pour les prochains:
Authentification login/mot de passe sans label avec message d'erreur echec authentification sur la base du tutoriel de Rob Allen sur le site suivant http://akrabat.com/zend-auth-tutorial/:
pour le formulaire:
$this->addElement('text', 'email', array(
'filters' => array('StringTrim', 'StringToLower'),
'validators' => array(
array('StringLength', true, array(0, 50))
),
'required' => true,
'value' => 'Email:',
'onfocus' => 'javascript:this.value = "";',
));
// ajouter un élément: password
$this->addElement('text', 'password', array(
'filters' => array('StringTrim'),
'validators' => array(
array('StringLength', true, array(0, 50)),
),
'required' => true,
'Value' => 'Mot de passe:',
'onfocus' => 'javascript:this.value = "";this.type="password";',
));
et le controller:
public function indexAction()
{
$errorMessage = "";
$form = new Application_Form_Login();
$request = $this->getRequest();
if ($request->isPost()) {
if ($form->isValid($request->getPost())) {
if ($this->_process($form->getValues())) {
// We're authenticated! Redirect to the home page
$this->_helper->redirector('index', 'index');
} else {
$errorMessage = "Login ou mot de passe incorrect";
}
}
$form->getElement("email")->setValue("Email:");
$form->getElement("password")->setValue("mot de passe:");
}
$this->view->errorMessage= $errorMessage;
$this->view->form = $form;
}
Dernière modification par bandit_rouge (05-09-2010 15:57:09)
Hors ligne
Pages: 1