Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous, je viens solliciter votre aide car je galère depuis plusieurs jours sur la facon de m'identifier sur mon site et ca commence tout doucement à me courrir sur le haricot.
J'ai pour le moment un site (un début de site) basé sur le modèle mvc, avec un layout.
Mon layout est relativement basique, une bannière d'entete, un menu sur la gauche, une zone centrale de contenu et un pied de page. Le tout géré par un css.
Dans le menu, je dois avoir une partie lien (qui est variable suivant si on est connecté ou non) et un formulaire d'identification dans le cas ou on est pas connecté. Alors c'est la que je commence à m'embrouiller et que je sais pas trop comment faire... plugin, helper, controleur,....???? lequel choisir et comment l'implémenté
Pour le moment j'ai suivis plusieurs tuto sur le net dont celui ci sur lequel je me suis principalement basé pour faire mon layout et mon identification (http://julien-pauli.developpez.com/tuto … nd-layout/) ou encore celui ci pour l'authentification (http://r-benyacoub.developpez.com/tutor … e=methodes).
Je vous mets le code de mon layout ci dessous,
<div id="banniere-top"><img src="/images/mep_top.gif" /></div> <div id="central"> <div id="menu"> <?php echo $this->action ( 'index', 'menu' )?></div> <div id="content"><?php echo $this->layout ()->content; ?></div> </div> <div id="footer"><img src="/images/mep_bottom.gif" /></div>
et pour le code de mon MenuControlleur
public function indexAction() { $auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { $this->view->msg ="mon menu auth"; $this->view->identity = $auth->getIdentity(); $this->render('index'); } else { $this->view->msg ="menu + demande de login"; $this->render('login'); } // $this->view->msg ="menu du login"; } function loginAction() { $this->view->msg = ''; if ($this->_request->isPost()) { $f = new Zend_Filter_StripTags(); $login = $f->filter($this->_request->getPost('login')); $password = $f->filter($this->_request->getPost('password')); if (empty($login)) { $this->view->msg = 'Please provide a username.'; } else { $authAdapter = new Zend_Auth_Adapter_DbTable(); $authAdapter->setTableName('login'); $authAdapter->setIdentityColumn('login'); $authAdapter->setCredentialColumn('log_pw'); $authAdapter->setIdentity($login); $authAdapter->setCredential($password); $auth = Zend_Auth::getInstance(); $result = $auth->authenticate($authAdapter); if ($result->isValid()) { $data = $authAdapter->getResultRowObject(null, 'password'); $auth->getStorage()->write($data); $this->_redirect('/'); } else { $this->view->msg = 'Login failed.'; } } } $this->view->title = "Log in"; $this->render(); }
Alors j'ai plusieurs problèmes: lorsque j'entre pour la 1e fois sur une page, c'est nikel. Par contre si je tente de me connecter, la j'ai soit une erreur interne 500 dans le cas ou mon login et pw sont correct (je soupconne qu'il boucle indéfiniment) soit ma page est un peu bizarre avec mon menu qui s'affiche horizontalement 2 fois :s.
Je suis pas sur d'utiliser la bonne méthode dans ce cas la, conseiller moi. Ou si je suis dans le bon, savez vous me dire ce qui cloche dans mes scripts?
Merci
Vincent
Dernière modification par b_20100 (16-11-2008 15:18:22)
Hors ligne
Que vient faire login action dans ton menu ????
Peux tu connaitre les logs pour savoir ce que génère l'erreur 500 ?
De plus, on ne connait pas le code qui est exécuter quand on appelle '/' (qui éventuellement provoquerait la boucle infinie)
Hors ligne
Voila j'ai fini par trouver l'erreur tout seul. Il s'agissait de mon adaptateur db qui était pas bien initialisé (Merci IE pour l'erreur 500 alors que FireFox me donnait l'erreur quasi en "clair").
Sinon pour répondre à nORKy, mon menu contient le formulaire de login donc je trouvais logique de mettre mon code la. Mon controlleur menu, c'est plutot une "colonne" dans ma page ou j'ai mon menu et mon formulaire d'identification. Si maintenant tu as une autre solution ou que c'est pas comme ca qu'il faut le faire, je suis ouvert à toutes propositions. (Je suis qu'un débutant avec zend et je connais pas encore toutes les ficelles de zend pour bien l'utiliser).
Merci, bonne journée à vous.
Vincent
Hors ligne
Ah, non, il n'a pas de meilleurs façon de faire : il y a la façon de faire à chacun.
C'est juste étonnant de voir ca dans un menu Eventuellement dans un header
Bien que dans tous les cas, perso, j'aurais 'sous decouper'. Comme ca, si on jour me prends de faire plusieurs mise en page différentes, j'ai juste le layout à modifier et la logique métier reste en place (mon code d'identification reste toujours dans le controller User)
Hors ligne
Oui c'est vrai qu'il n'y a pas une facon de coder... juste qu'il y en a qui sont meilleures que d'autres (mieux adaptées, plus claire,...) et que donc en étant débutant sur une technologie, on métrise pas ces choses la et que ca ne vient qu'à la longue.
mais c'est vrai que j'avais pensé découplé le menu - du login.
Pour générer mes liens supplémentaires dans le menu quand on est connecté, ca c'est OK, je vois comment faire mais par contre je savais pas comment ne pas afficher le formulaire dans le cas ou j'étais déjà identifier.
Parce que j'aurai eu un layout comme ca..
<div id="banniere-top"><img src="/images/mep_top.gif" /></div> <div id="central"> <div id="menu"><?php echo $this->action ( 'index', 'menu' )?></div> <div id="login"><?php echo $this->action ( 'index', 'login' )?></div> <div id="content"><?php echo $this->layout ()->content; ?></div> </div> <div id="footer"><img src="/images/mep_bottom.gif" /></div>
juste? et que donc à chaque fois il allait passer dans index de mon controlleur login et donc me rendre mon formulaire non? Ou alors il y a peut etre une facon de passer dans un controlleur sans rendre de vue dans le cas ou je suis déjà connecté?
Hors ligne
oui
Dans ton action :
qqchose comme ca :
if (!$auth->hasIdentity()) { $this->_helper->viewRenderer->setNoRender(); }
Et rien ne sera rendu.
Hors ligne
Merci à toi nORKy ca fonctionne et c'est beaucoup plus clair comme ca .
J'avais pensé faire la meme méthode que celle que tu m'as donné mais je sais pas pourquoi quand je l'avais essayé, tout ce qui était construit après le formulaire de loggin n'était pas rendu... les mistères de l'informatique lol
Je vais maintenant pouvoir m'attaquer aux acl (et j'aurai certainement encore des questions la dessus)
Vincent
Hors ligne