Cambio de contraseña en PHP
No se puede simplemente cambiar la contraseña en la cuenta personal. El problema es que el usuario puede dejar su computadora desatendida (por ejemplo, en la oficina), estando autorizado en nuestro sitio web. En este caso, si permitimos cambiar simplemente la contraseña, un intruso malintencionado podría cambiar la contraseña por otra, lo que, por supuesto, es muy malo.
Es necesario hacer que el cambio de contraseña a una nueva requiera ingresar la contraseña anterior.
Implementemos la página changePassword.php,
al acceder a la cual el usuario verá un formulario
con dos inputs: en el primero deberá
ingresar su contraseña anterior, y en el segundo, la nueva:
<form action="" method="POST">
<input name="old_password">
<input name="new_password">
<input type="submit" name="submit">
</form>
Al presionar el botón de envío debemos hacer lo siguiente:
<?php
$id = $_SESSION['id']; // id del usuario desde la sesión
$query = "SELECT * FROM users WHERE id='$id'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
$hash = $user['password']; // contraseña con hash de la BD
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
// Verificamos la correspondencia del hash de la base de datos con la contraseña anterior ingresada
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 {
// la contraseña anterior se ingresó incorrectamente, mostraremos un mensaje
}
?>
Implemente el cambio de contraseña descrito.