Lors de l'utilisation de la fonction password_hash() de PHP pour hacher les mots de passe pour le stockage dans une base de données, il est essentiel de comprendre comment le mot de passe haché est vérifié lors de la connexion à l'aide de password_verify().
Dans votre code, la fonction password_hash() hache le mot de passe avant de le stocker dans la base de données. Cependant, dans le script de connexion, vous comparez directement le mot de passe non haché saisi par l'utilisateur avec le mot de passe haché stocké dans la base de données à l'aide de password_verify(). Cette comparaison échouera toujours.
La bonne façon de vérifier un mot de passe à l'aide de password_verify() est de transmettre le mot de passe non haché saisi par l'utilisateur comme premier argument et le mot de passe haché mot de passe stocké dans la base de données comme deuxième argument. Cela permettra à password_verify() de comparer correctement les deux mots de passe.
Voici une version modifiée de votre script de connexion avec la vérification du mot de passe corrigée :
<code class="php">if($_SERVER["REQUEST_METHOD"] == "POST"){ $p_num = $_POST["username"]; $pwd = $_POST["password"]; $query = "SELECT * FROM `$user_table` WHERE `user_id` = '$p_num'"; $result = mysqli_query($connect, $query); while($row = mysqli_fetch_assoc($result)){ $user_id = $row['user_id']; $first_name = $row['first_name']; $last_name = $row['last_name']; $user_name = $first_name ." " .$last_name; $password = $row['password']; $image = $row['image']; $email = $row['email']; $program = $row['program']; $role = $row['role']; $status = $row['logged_in']; $registered = $row['registered']; // Verify the password using password_verify() if(($user_id == $p_num) && (password_verify($pwd, $password))){ $_SESSION["id"] = $user_id; $_SESSION["user"] = $user_name; $_SESSION["program"] = $program; $_SESSION["pass"] = $password; $_SESSION["image"] = $image; $_SESSION["email"] = $email; $_SESSION["role"] = $role; $_SESSION["status"] = $status; $_SESSION["registered"] = $registered; $loggedin = "UPDATE `$user_table` SET `logged_in` = 1 WHERE `user_id` = '$user_id'"; } var_dump($pwd); var_dump($password); } }</code>
En utilisant correctement password_verify(), vous pouvez valider avec précision les mots de passe des utilisateurs lors de la connexion, garantissant ainsi la sécurité et l'intégrité de votre système.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!