Смяна на парола в PHP
Смяната на парола не може просто да се направи в личния кабинет. Работата е там, че потребителят може да остави своя компютър без надзор (например, в офиса), като е автентикиран в нашия уебсайт. В този случай, ако се разреши просто да се сменя паролата, то злонамерен потребител ще може да смени паролата на друга, което, разбира се, е много лошо.
Необходимо е да се направи така, че смяната на парола на нова да изисква въвеждане на старата парола.
Нека реализираме страница changePassword.php,
като влезете в която потребителят ще види форма
с два инпут полета - в първото той трябва да
въведе старата си парола, а във второто - новата:
<form action="" method="POST">
<input name="old_password">
<input name="new_password">
<input type="submit" name="submit">
</form>
При натискане на бутона за изпращане трябва да направим следното:
<?php
$id = $_SESSION['id']; // id на потребителя от сесията
$query = "SELECT * FROM users WHERE id='$id'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
$hash = $user['password']; // солена парола от БД
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
// Проверяваме съответствието на хеша от базата с въведената стара парола
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 {
// старата парола е въведена неправилно, ще изведем съобщение
}
?>
Реализирайте описаната смяна на парола.