IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Acl & Zend_Auth PHP Discussion :

redirection après l'identification


Sujet :

Zend_Acl & Zend_Auth PHP

  1. #1
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut redirection après l'identification
    Bonjour à tous,

    La redirection qui se fait après l'identification d'un utilisateur bug : après validation du formulaire d'identification le programme tourne assé longtemps (comme s'il y avait une boucle qui n'arriverait pas à se terminer) et je suis redirigé vers une adresse dans laquelle il répète plusieurs fois le nom du controlleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    http://localhost/auth/auth/auth/auth/auth/auth/auth/auth/auth/auth/auth/auth/auth/auth/auth/auth/auth/auth/auth/auth/auth/auth/login
    au lieu d'arriver là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    http://localhost/auth/login

    J'ai commenté ligne par ligne les instructions de la méthode du controlleur concerné pour essayer de comprendre ce qui se passait mais je n'ai pas vraiement trouvé, c'est assé étrange ...

    Voici le code de la méthode du controlleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
        function loginAction()
        {
            $form = new Form_Auth();
            $form->setAction($this->view->link('auth', 'login', ''))
                 ->setMethod('post');
            if ($this->_request->isPost() && $form->isValid($_POST)) {
                $authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Registry::get('dbAdapter'), 'utilisateur', 'login', 'password', 'MD5(?)');
                $f = new Zend_Filter_StripTags();
                $authAdapter->setIdentity($f->filter($this->_request->getPost('login')));
                $authAdapter->setCredential($f->filter($this->_request->getPost('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->message = $this->view->translate("Identification failed.");
                }
            }
            $this->view->form = $form;
        }
    Voilà, si quelqu'un à une petite idée de ce qu'il m'arrive je suis preneur de tous conseils

  2. #2
    Membre confirmé
    Avatar de FERDIKAM
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2005
    Messages : 123
    Points : 616
    Points
    616
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->_redirect('/index')

  3. #3
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Je viens de tester mais ça ne fonctionne toujours pas ...

  4. #4
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Je désespère, personne n'a une petite idée de ce qu'il se passe ?

  5. #5
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Bonjour,

    Si tu enleve ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $form->setAction($this->view->link('auth', 'login', ''))
    ça donne quoi?
    Et a quel moment ça tourne en rond? Au moment du post de formulaire ou bien après identification reussie?

  6. #6
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Salut,

    Ca tourne en rond après validation du formulaire dans le cas d'une authentification réussie.

    Je teste ce que tu m'as marqué de suite.

    Merci !!!!

    Alors résultat des tests : ça ne change rien.

    Je suis aller dans la source html voir ce que j'avais dans l'attribut action du formulaire et il y a la bonne redirection.

  7. #7
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    ça sert à rien de tester si c'est après identification réussi c'est cette ligne qui pose problème:

    Essaie plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->_redirect('/localhost');
    T'utilise quoi comme serveur web? apache? quelle est ta config?
    Que contient le .htaccess?

  8. #8
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    En indiquant localhost toujours la même erreur.

    Je suis en local et j'utilise apache via wamp.


    Voilà le contenu de mon fichier .htaccess :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # Règles de réécriture pour Zend Framework
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule !\.(txt|swf|js|ico|gif|jpg|png|css|xml) index.php
     
    # Sécurité : Ne pas autoriser le parcours de répertoires
    Options -Indexes
     
    # Configuration PHP
    php_flag magic_quotes_gpc off
    php_flag register_globals off
    php_flag short_open_tag on

  9. #9
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Version de ZF?

  10. #10
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    1.9.3PL1

  11. #11
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    As-tu mis en place des regles de réecritude d'url (zend routeur)?
    Si oui fait voir...

    As-tu créé des plugins? si oui lesquels?

    Sinon essaie avec ce .htaccess

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]

  12. #12
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Je n'ai aucunes règles de réécriture spécifique.
    J'ai essayé avec ton .htaccess mais rien n'y fait.
    J'ai 4 plugins (library/malibrairie/controller/plugins)

    Auth.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    class Farnsworth_Controller_Plugins_Auth extends Zend_Controller_Plugin_Abstract	{
    	/**
    	 * @var Zend_Auth instance 
    	 */
    	private $_auth;
     
    	/**
    	 * @var Zend_Acl instance 
    	 */
    	private $_acl;
     
    	/**
    	 * Chemin de redirection lors de l'échec d'authentification
    	 */
    	const FAIL_AUTH_MODULE     = 'login';
    	const FAIL_AUTH_ACTION     = 'login';
    	const FAIL_AUTH_CONTROLLER = 'auth';
     
    	/**
    	 * Chemin de redirection lors de l'échec de contrôle des privilèges
    	 */
    	const FAIL_ACL_MODULE     = 'login';
    	const FAIL_ACL_ACTION     = 'login';
    	const FAIL_ACL_CONTROLLER = 'auth';
     
    	/**
    	 * Constructeur
    	 */
    	public function __construct(Zend_Acl $acl)	{
    		$this->_acl  = $acl ;
    		$this->_auth = Zend_Auth::getInstance() ;
    	}
     
    	/**
    	 * Vérifie les autorisations
    	 * Utilise _request et _response hérités et injectés par le FC
    	 */
    	public function preDispatch(Zend_Controller_Request_Abstract $request)	{
    		// is the user authenticated
    		if ($this->_auth->hasIdentity()) {
    		  // yes ! we get his role
    		  $user = $this->_auth->getStorage()->read();
    		  $role = Farnsworth_Auth_CompanyType::getType($user->company);
    		} else {
    		  // no = guest user
    		  $role = 'guest';
    		}
     
    		$module 	= $request->getModuleName() ;
    		$controller = $request->getControllerName() ;
    		$action     = $request->getActionName() ;
     
    		$front = Zend_Controller_Front::getInstance() ;
    		$default = $front->getDefaultModule() ;
     
    		// compose le nom de la ressource
    		if ($module == $default)	{
    			$resource = $controller ;
    		} else {
    			$resource = $module.'_'.$controller ;
    		}
     
    		// est-ce que la ressource existe ?
    		if (!$this->_acl->has($resource)) {
    		  $resource = null;
    		}
     
    		// contrôle si l'utilisateur est autorisé
    		if (!$this->_acl->isAllowed($role, $resource, $action)) {
    			// l'utilisateur n'est pas autorisé Ã* accéder Ã* cette ressource
    			// on va le rediriger
    			if (!$this->_auth->hasIdentity()) {
    				// il n'est pas identifié -> module de login
    				$module = self::FAIL_AUTH_MODULE ;
    				$controller = self::FAIL_AUTH_CONTROLLER ;
    				$action = self::FAIL_AUTH_ACTION ;
    			} else {
    				// il est identifié -> error de privilèges
    				$module = self::FAIL_ACL_MODULE ;
    				$controller = self::FAIL_ACL_CONTROLLER ;
    				$action = self::FAIL_ACL_ACTION ;
    			}
    		}
     
    		$request->setModuleName($module) ;
    		$request->setControllerName($controller) ;
    		$request->setActionName($action) ;
    	}
    }
    Order.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Farnsworth_Controller_Plugins_Order extends Zend_Controller_Plugin_Abstract 
    {
    	public function preDispatch (Zend_Controller_Request_Abstract $request) 
    	{
    		$ctrlName = $request->getControllerName();
            $actionName = $request->getActionName();
            $session = new Zend_Session_Namespace('command');
    		if (count($session->data) && $ctrlName != 'order' && $ctrlName != 'draft' && $ctrlName != 'addfixedlabels' && $ctrlName != 'variabledatatoenter' && $ctrlName != 'variabledatatoconfirm') {
    			$request->setControllerName("order");
    			$request->setActionName("leave");	
    		}
    	}
    }
    Session.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
     
    class Farnsworth_Controller_Plugins_Session extends Zend_Controller_Plugin_Abstract
    {
        /**
         * Session récupérée du registre
         *
         * @var Zend_Session_Namespace
         */
        private $_session;
     
        /**
         * En-têtes du navigateur
         * 
         * @var string
         */
        private $_clientHeaders;
     
     
        /**
         * Constructeur
         */
        public function __construct()
        {
            $this->_session       = Zend_Registry::get('session');
            $this->_clientHeaders = $_SERVER['HTTP_USER_AGENT'];
            if (array_key_exists('HTTP_ACCEPT', $_SERVER)) {
                $this->_clientHeaders .= $_SERVER['HTTP_ACCEPT'];
            }
            $this->_clientHeaders = md5($this->_clientHeaders);
        }
     
        /**
         * Hook Ã* l'entrée dans la boucle de dispatching
         * Vérifie si il n'y a pas eu tentative de vol de la session
         * en comparant les en-têtes du navigateur
         *
         * @param $request Zend_Controller_Request_Abstract
         */
        public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
        {
            if(Zend_Auth::getInstance()->hasIdentity()) {
                if ($this->_session->clientBrowser != $this->_clientHeaders) {
                    Zend_Session::destroy();
                    $this->_response->setHttpResponseCode(403);
                    $this->_response->clearBody();
                    $this->_response->sendResponse();
                    exit;
                }
            }
        }
     
        /**
         * Hook Ã* la sortie de la boucle de dispatching.
         * 
         * Mémorise l'Uri actuelle en vue de la réutiliser pour redirection
         * sur la page précédente.
         * 
         * @return void
         */
        public function dispatchLoopShutdown()
        {
            $this->_session->requestUri = $this->getRequest()->getRequestUri();
            $this->_session->clientBrowser = $this->_clientHeaders;
        }
    }
    User.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Farnsworth_Controller_Plugins_User extends Zend_Controller_Plugin_Abstract 
    {
    	public function preDispatch (Zend_Controller_Request_Abstract $request) 
    	{
    		$this->view->user = Zend_Auth::getInstance()->getIdentity();
    	}
    }

  13. #13
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Peux-tu essayer en désactivant ton système d'acl?

  14. #14
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    J'ai désactiver le chargmeent du plugin dans mon index et toujours rien, par contre dans le code de ma méthode loginAction si je comment le contenu du code à executer en cas de validation du formulaire comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    	function loginAction()
    	{
            $form = new Form_Auth();
            $form->setAction($this->view->link('auth', 'login', ''))
                 ->setMethod('post');
    		if ($this->_request->isPost() && $form->isValid($_POST)) {
    			$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Registry::get('dbAdapter'), 'utilisateur', 'login', 'password', 'MD5(?)');
    			$f = new Zend_Filter_StripTags();
    			$authAdapter->setIdentity($f->filter($this->_request->getPost('login')));
    			$authAdapter->setCredential($f->filter($this->_request->getPost('password')));
    			$auth = Zend_Auth::getInstance();
    			// $result = $auth->authenticate($authAdapter);
    			// if ($result->isValid()) {
    				// $data = $authAdapter->getResultRowObject(null, 'password');
    				// $auth->getStorage()->write($data);
    				// $this->_redirect('/index');
    			// } else {
    				// $this->view->message = $this->view->translate("Identification failed.");
    			// }
    		}
    		$this->view->form = $form;
    	}
    je n'ai plus cette boucle infinie ... et l'application en ligne ne me fait pas non plus cette boucle infinie, uniquement en local !

  15. #15
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Dans ce cas essaie de te configurer un virtual host avec apache et retente le coup.
    Pour les vhost t'a la doc ici:
    http://framework.zend.com/manual/fr/...e-project.html

  16. #16
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Pourquoi en vhost ?

  17. #17
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    ça te permet de reproduire la même configuration que ton serveur en production:

    En production tu accède à ton site via l'url http://monsite.com
    Alors qu'en local tu l'attaque via cette url : http://localhost

    Si tu te fait un vhost en local, tu accède à ton url par http://monsite.local par exemple

    Si cela résout ton problème, cela voudra dire qu'il y a un truc bizare qui se passe via l'url http://localhost soit avec ZF, soit avec wamp.

  18. #18
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Enfin ça marche ! je travaillais dans un sous dossier :

    localhost/zendproject/myproject

    Je suis passé à :

    localhost/myproject

    C'est une bonne chose ... c'est ton histoire de virtual host qui m'a motivé à tenté ça.
    Le seul hic c'est que je n'arrive vraiment pas à comprendre d'ou ça venait ...

    En tout cas merci manuscle d'avoir pris le temps de m'aider !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Joomla!] problème de redirection apres identification sur frontend en local
    Par dadal56 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 12/01/2010, 16h17
  2. Redirection après identification
    Par ghada025 dans le forum Langage
    Réponses: 6
    Dernier message: 12/09/2008, 14h49
  3. sauvegarder url pour redirection après identification
    Par aurelientp dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 05/03/2008, 10h33
  4. Probleme de redirection apres fermeture de session
    Par soufienne dans le forum ASP
    Réponses: 3
    Dernier message: 08/04/2004, 10h52
  5. [Strategie]Redirection après un formulaire
    Par kyser91 dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 19/03/2004, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo