Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Ouvrir une session

Posted by bidy on 03/08/2013 14:55

Bonjour à tous,

Je suis actuellement sur un projet de création de site avec Jelix, et j'ai créé un formulaire de connexion, ainsi que la fonction associée dans le controller default.classic

Le formulaire est très simple, placé dans le dossiers forms, l'adresse mail ("email", dans la BDD) étant utilisée comme login, et le mot de passe est "motDePasse", dans la BDD.

<form xmlns="http://jelix.org/ns/forms/1.1">
  
    <input ref="email">
        <label>Votre email</label>
    </input>
    
    <secret ref="motDePasse">
        <label>Votre mot de passe</label>
    </secret>
    <submit ref="submit">
        <label>Se connecter</label>
    </submit>
</form>

Ma fonction étant

function connexion() {
        $ERR = FALSE;
        // je stock les valeur entrées dans des variables pour simplifier par la suite
        $mail = $this->param('email'); //ce sont les
        $MDP = $this->param('motDePasse');

        $cnx = jDb::getConnection();
        //Préparation de la requête de recherche du mail
        $sql = "SELECT * FROM user WHERE email='$mail'";
        $req = $cnx->query($sql);
        $compt = count($req->fetchAll()); // compte le nombre de lignes correspondant à l'user dont l'email est $mail
        
        $sql2 = "SELECT motDePasse FROM user WHERE email='$mail'";
        $req2 = $cnx->query($sql2);
        $pw = $req2->fetchAll();
        foreach ($pw as $user) { //ici, un seul user sera retourné (unicité de l'adresse mail) donc 1 passage boucle 
            $mdpUser= $user->motDePasse;
        }
        

        if ($mail == NULL OR $MDP == NULL) { //On renvoie une erreur si l'un des champs est vide
            $ERR = TRUE;
            $ErrMess = "Veuillez remplir tous les champs";
        }
        elseif ($compt == 0) { //Si le compt vaut 0, l'email n'est pas dans la base
            $ERR = TRUE;
            $ErrMess = "Adresse mail non reconnue";
        }
        elseif ($MDP!=$mdpUser){
            $ERR = TRUE;
            $ErrMess = "Le mot de passe ne correspond pas à l'adresse mail";
        }
        else{
            echo "vous etes connecté";
        }
        
        
        if ($ERR == TRUE) {
            echo $ErrMess;
        }
        return $this->index();
    }

Tout fonctionne à merveille. Mais maintenant, je suis bloqué pour l'ouverture d'une session, pour que l'utilisateur reste connecté le temps de sa navigation, ou jusqu'à l'appui sur le bouton "déconnexion" (que je n'ai pas encore fait)

Ma question est donc : "Que dois-je mettre dans le dernier "else" à la place du <<echo "vous etes connecté";>> ?".

Merci d'avance pour vos réponses !

Bidy

  [Opened] Ouvrir une session

Bonjour,

vous devriez vous pencher sur la documentation pour l'authentification des utilisateurs d'une part et d'autre part, si votre site permet l'inscription de "membre" vous avez alors un module pret à l'emploi nommé jCommunity


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Re: Ouvrir une session

Reply #2 Posted by bidy on 03/08/2013 15:45

Je vais me pencher sur ces deux parties de docs !

Merci beaucoup en tout cas ! apparemment mes recherches n'étaient pas assez poussées.

  [Opened] Ouvrir une session

Reply #3 Posted by jwalter on 03/21/2013 11:22

C'est moi où il y a vraiment un gros soucis avec ce script ?

Si je lit bien le code, si je renseigne quelque chose dans mail et quelque chose dans MDP, je serais connecté !

Il faudrait revoir ce script de connexion !

  • Tester l'alimentation des variables avant de faire les appels à la base de données
  • Utiliser au moins un système de hash pour stocker les mots de passes
  • Faire un seul appel à la base avec email + mdp serait je pense plus judicieux !

Autre chose, pourquoi ne pas utiliser jDao pour accéder à la table user ? ce serais plus pratique !

Et utiliser jAuth ou JCommunity me parait être une très bonne idée !

Bon courage pour la suite !

  [Opened] Ouvrir une session

Reply #4 Posted by EricD on 04/01/2013 02:22

jwalter a dit :
C'est moi où il y a vraiment un gros soucis avec ce script ?

Si je lit bien le code, si je renseigne quelque chose dans mail et quelque chose dans MDP, je serais connecté !

Il faudrait revoir ce script de connexion !
- Tester l'alimentation des variables avant de faire les appels à la base de données
- Utiliser au moins un système de hash pour stocker les mots de passes
- Faire un seul appel à la base avec email + mdp serait je pense plus judicieux !

Autre chose, pourquoi ne pas utiliser jDao pour accéder à la table user ? ce serais plus pratique !

Et utiliser jAuth ou JCommunity me parait être une très bonne idée !

Bon courage pour la suite !

Oui est non si tu regarde l'auth utiliser par Jelix, tu récupères l'user par son login. Et après tu fait ce que tu a faire pour comparer en php le password.

Ceci te permet d’être plus indépendant de ta bdd, mais aussi de personnaliser ton système de cryptage.

 
Page
  1. Ouvrir une session