Changer le mot de passe en PHP
Il est impossible de simplement changer le mot de passe dans l'espace personnel. En effet, l'utilisateur pourrait laisser son ordinateur sans surveillance (par exemple, au bureau) tout en étant connecté à notre site. Dans ce cas, si on autorisait un changement simple du mot de passe, un malfaiteur malintentionné pourrait le changer, ce qui, bien entendu, serait très problématique.
Il est nécessaire de faire en sorte que le changement de mot de passe exige la saisie de l'ancien mot de passe.
Implémentons la page changePassword.php,
sur laquelle l'utilisateur verra un formulaire
avec deux champs - dans le premier, il devra
saisir son ancien mot de passe, et dans le second - le nouveau :
<form action="" method="POST">
<input name="old_password">
<input name="new_password">
<input type="submit" name="submit">
</form>
Lors du clic sur le bouton d'envoi, nous devons effectuer les opérations suivantes :
<?php
$id = $_SESSION['id']; // id de l'utilisateur depuis la session
$query = "SELECT * FROM users WHERE id='$id'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
$hash = $user['password']; // mot de passe salé depuis la BDD
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
// Vérifions la correspondance entre le hash de la base et l'ancien mot de passe saisi
if (password_verify($oldPassword, $hash)) {
$newPasswordHash = password_hash($newPassword, PASSWORD_DEFAULT);
$query = "UPDATE users SET password='$newPasswordHash' WHERE id='$id'";
mysqli_query($link, $query);
} else {
// l'ancien mot de passe est incorrect, affichons un message
}
?>
Implémentez le changement de mot de passe décrit.