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

MkFramework Discussion :

Redirection après Authentification


Sujet :

MkFramework

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    personnage virtuel
    Inscrit en
    Mars 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : personnage virtuel
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 33
    Points : 34
    Points
    34
    Par défaut Redirection après Authentification
    Bonjour à tous,

    J'essaie de construire un site avec espace public/espace privé. J'y parviens assez bien avec le module auth, mais j'ai un problème auquel notre ami imikado va sans doute pouvoir répondre aisément.

    Lorsque que j'accède, à partir de l'espace public, à une page de l'espace privé, je suis normalement orienté vers la page Login si je ne suis pas connecté.

    Le process login dans le main.php me permet ensuite de valider la connexion à l'aide de la fonction checkLoginPass().

    Mais je voudrais que suite à cette vérification, je puisse rediger vers la page cible, et non la page index comme c'est le cas actuellement.

    Il faudrait donc que je puisse récupérer, à un moment du process, le couple module::page cible avant orientation vers la page login, pour pouvoir ensuite le passer dans la fonction redirect qui termine la fonction checkLoginPass().

    Comment faire çà ?

    Ylian

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Bonjour,
    Vous pouvez modifier simplement la redirection

    Votre méthode checkLoginPass de votre module d'authentification doit ressembler à ça
    Code php : 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
     
    private function checkLoginPass(){
    		//si le formulaire n'est pas envoye on s'arrete la
    		if(!_root::getRequest()->isPost() ){
    			return null;
    		}
     
    		$sLogin=_root::getParam('login');
    		$sPassword=_root::getParam('password');
     
    		if(strlen($sPassword > $this->maxPasswordLength)){
    			return 'Mot de passe trop long';
    		}
     
    		//on stoque les mots de passe hashe dans la classe model_user
    		$sHashPassword=model_user::getInstance()->hashPassword($sPassword);
    		$tAccount=model_user::getInstance()->getListAccount();
     
    		//on va verifier que l'on trouve dans le tableau retourne par notre model
    		//l'entree $tAccount[ login ][ mot de passe hashe ]
    		if(!_root::getAuth()->checkLoginPass($tAccount,$sLogin,$sHashPassword)){
    			return 'Mauvais login/mot de passe';
    		}
     
    		_root::redirect('default::index');
    	}

    il suffit de modifier la dernière ligne concernant la redirection, ici vers default::index (action _index du module default)
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    personnage virtuel
    Inscrit en
    Mars 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : personnage virtuel
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 33
    Points : 34
    Points
    34
    Par défaut
    cela, je l'avais bien compris. Le problème est de capturer ou récupérer la page appelante avant le login, parce que toute page de l'espace privé doit pouvoir être conservée par le module auth pour pouvoir ensuite faire l'objet de cette redirection.

  4. #4
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Autant pour moi
    Dans ce cas là, il faut modifier le plugin_auth

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function isConnected(){
             if(!$this->_isConnected()){
                  return false;
              }

    Cette méthode étant appelée pour justement vérifier que l'internaute est connecté ou non avant de rediriger

    Ici: avant le return fase, vous devriez ajouter un enregistrement de la page demandé dans le tableau de session

    Ainsi, suite au checkLoginPass, vous pourriez, si cette variable est enregistré redirigé vers cette page
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    personnage virtuel
    Inscrit en
    Mars 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : personnage virtuel
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 33
    Points : 34
    Points
    34
    Par défaut
    Donc, au niveau du module auth, je dois récupérer le couple module::page de la page demandée.

    Question 1 : est-ce qu'on dispose d'une fonction dans le framework pour obtenir le lien de la page en cours (équivalent d'un HTTP_REFERER ou d'un PHP_SELF)

    Question 2 : est-ce que la capture de cette adresse doit se faire dans le before du module cible ou dans le before du module auth ?

  6. #6
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Non ce n'est pas ce que j'ai dit:

    Dans le plugin plugin_auth, dans la méthode isConnected, qui est appelé sur chaque page, on va ajouter avant le return false un enregistrement de la page demandée
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public function isConnected(){
    		if(!$this->_isConnected()){
    			if(_root::getParamNav()!='auth::login'){
    			$_SESSION['pageDemandee']=_root::getParamNav();
    			}
    			return false;
    		}
     
    		$this->setAccount(unserialize($_SESSION['oAccount']));
     
    		//ajouter critere supp pour verification de l'authentification
    		return true;
    	}

    Et dans le module auth, methode checkLoginPass, au lieu de
    Code php : 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
     
     
    private function checkLoginPass(){
    		//si le formulaire n'est pas envoye on s'arrete la
    		if(!_root::getRequest()->isPost() ){
    			return null;
    		}
     
    		$sLogin=_root::getParam('login');
    		$sPassword=_root::getParam('password');
     
    		if(strlen($sPassword > $this->maxPasswordLength)){
    			return 'Mot de passe trop long';
    		}
     
    		//on stoque les mots de passe hashe dans la classe model_user
    		$sHashPassword=model_user::getInstance()->hashPassword($sPassword);
    		$tAccount=model_user::getInstance()->getListAccount();
     
    		//on va verifier que l'on trouve dans le tableau retourne par notre model
    		//l'entree $tAccount[ login ][ mot de passe hashe ]
    		if(!_root::getAuth()->checkLoginPass($tAccount,$sLogin,$sHashPassword)){
    			return 'Mauvais login/mot de passe';
    		}
     
    		_root::redirect('default::index');
    	}

    on remplace la redirection classique default::index par cette variable
    ce qui donne

    Code php : 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
     
     
    private function checkLoginPass(){
    		//si le formulaire n'est pas envoye on s'arrete la
    		if(!_root::getRequest()->isPost() ){
    			return null;
    		}
     
    		$sLogin=_root::getParam('login');
    		$sPassword=_root::getParam('password');
     
    		if(strlen($sPassword > $this->maxPasswordLength)){
    			return 'Mot de passe trop long';
    		}
     
    		//on stoque les mots de passe hashe dans la classe model_user
    		$sHashPassword=model_user::getInstance()->hashPassword($sPassword);
    		$tAccount=model_user::getInstance()->getListAccount();
     
    		//on va verifier que l'on trouve dans le tableau retourne par notre model
    		//l'entree $tAccount[ login ][ mot de passe hashe ]
    		if(!_root::getAuth()->checkLoginPass($tAccount,$sLogin,$sHashPassword)){
    			return 'Mauvais login/mot de passe';
    		}
     
                    if(isset($_SESSION['pageDemandee'])){
                      //on redirige vers la page au prealable enregistree
                      _root::redirect($_SESSION['pageDemandee']);
                    }else{
    		 _root::redirect('default::index');
                     }
    	}

    Vous voyez l'idée?

    Note:
    ajoutez pour la methode logout une suppression de la page enregistrée:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function logout(){
    		$_SESSION['pageDemandee']=null;
    		$this->_disconnect();
    		_root::redirect('auth::login');
    	}
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    personnage virtuel
    Inscrit en
    Mars 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : personnage virtuel
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 33
    Points : 34
    Points
    34
    Par défaut
    Ça marche au poil.

    Je suis surpris que cette question n'est pas été évoquée plus tôt. Les espaces publics/privés, c'est pourtant du classique.

    Mon précédent site sur mkframework était 100% privé, je n'avais pas le problème.

    Mais j'ai déjà, par ailleurs, réalisé plusieurs projets avec des espaces public/privé et l'utilisation du framework, une fois cette question élucidée, est un vrai plus.

    Ylian

  8. #8
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    En effet, j'essaierai d'ajouter ce point dans les tutoriaux sur le site

    Je marque le sujet en résolu
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

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

Discussions similaires

  1. Redirection après authentification avec la sécurité Realm
    Par bruneltouopi dans le forum Glassfish et Payara
    Réponses: 7
    Dernier message: 21/04/2013, 14h25
  2. [2.x] Redirection après authentification
    Par kolodz dans le forum Symfony
    Réponses: 1
    Dernier message: 10/05/2012, 17h15
  3. Redirection apres authentification
    Par nander dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 22/03/2011, 20h20
  4. Redirection apres authentification
    Par roronnoa dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 26/11/2008, 11h18
  5. Réponses: 9
    Dernier message: 25/06/2008, 13h40

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