Problème d'identification utilisateur

Petit nouveau ! | 1 Messages

03 mars 2021, 09:40

bonjour, je suis actuellement une formation de wed developer et je rencontre un problème avec la connexion de mes utilisateurs. Je sais que mon code bloque au niveau du passeword_verify mais je n'arrive pas a y remédier voici mon code :
<?php
    require "connexion.php";

    if (isset($_POST["formidentification"])){
        $pseudo_connect = htmlspecialchars(trim($_POST["pseudo_connect"]));
        $mdp_connect = htmlspecialchars(trim($_POST["mdp_connect"]));
        if(!empty($pseudo_connect) && !empty($mdp_connect)){
            $sth = $conn ->prepare("SELECT * FROM membre WHERE pseudo = ? AND mdp = ?");
            $sth->execute(array($pseudo_connect,$mdp_connect));
            // Exécution de la requette
            $sth->execute();
            // Récupération des résultats de la requette
            while($resultat = $sth->fetch(PDO::FETCH_ASSOC)){
                $pseudo = $resultat["pseudo"];
                $mdp= $resultat["mdp"];
                $hash= password_hash($mdp,PASSWORD_DEFAULT);    
            };
              //////// Vérification du mot de passe /////////////
                if(password_verify ($mdp_connect, $mdp)){
                    echo'ok';
                    // Si le mdp est ok
                    // >>>>> Demarrage de la session
                    session_start();
                    $_SESSION['pseudo'] = $pseudo;
                    // >>>>> Création d'un cookie
                    $value = $pseudo;
                    setcookie($pseudo_user, $value, time()+3600);
                    print_r($_COOKIE) . '<br>';
                }else{
               // Si le mdp n'est pas bon, j'affecte une variable pour un msg d'erreur
                echo 'Le mot de passe n\'est pas bon !!!';
  };
    }
}
?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Identification</title>

    </head>
    <body>

        <h1>ENREGISTREZ-VOUS</h1>
        <form action="" method="POST">
            <label for="pseudo_connect">Votre Pseudo</label>
                <input type="text" placeholder="votre pseudo" name="pseudo_connect"><br><br>
                <label for="mdp_connect">Votre Mot de passe</label>
                <input type="text" placeholder="votre mdp" name="mdp_connect"><br><br>
                <input type="submit" name="formidentification" value="Je m'identifie"><br><br>
        </form>
        <a href="index.php">Retour à l'accueil</a>

    </body>
</html>
merci par avance
Modifié en dernier par Ryle le 03 mars 2021, 13:04, modifié 1 fois.
Raison : Mise en forme du message

Avatar du membre
Mammouth du PHP | 1564 Messages

03 mars 2021, 10:25

Salut, met ton code dans la balise PHP stp.

Quelle erreur tu as à l'écran quand tu lance ton script ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 mars 2021, 13:10

Salutations !

En fait il y a un truc étrange dans ton code, c'est qu'avant d'arriver au password_verify(), tu fais une requête sur ta table membre pour cherches les utilisateurs qui auraient les mêmes pseudo et mot de passe que ceux fournis par l'utilisateur.

Donc soit il y en a bien et ton mot de passe est en clair en base, ce qui fait qu'il n'est pas nécessaire de faire de contrôle sur son hash, mais qui serait pas vraiment sécurisé. Soit le mot de passe est bien hashé en base, auquel cas cette requête ne doit pas te retourner de résultat.

Il faut soit hasher le mot de passe envoyé par l'utilisateur et comparer les deux hash en base directement en SQL, soit uniquement passer le login dans ta requête pour récupérer le mot de passe hasher en base et tu pourra alors comparer en php les deux valeurs (celui envoyé et celui présent en base)

Ps : un "wed" developer, c'est quelqu'un qui développe des applications pour faciliter les mariages ? ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Mammouth du PHP | 1609 Messages

03 mars 2021, 22:41

Salut, sauf erreur de ma part, tu ne devrais pas non plus avoir les fonctions password_hash et password_verify dans le même script. password_hash est à utiliser lors de la création de l'utilisateur et de son insertion en base de données pour enregistrer le password haché. Et password_verify est à utiliser lors de la connexion de l'utilisateur pour vérifier que le password fournis (non haché donc) correspond bien au hash enregistré dans la base de données.
Développeur web depuis + de 20 ans