Thay đổi mật khẩu bằng PHP
Việc thay đổi mật khẩu không thể đơn giản thực hiện trong tài khoản cá nhân. Lý do là người dùng có thể để máy tính của họ không được giám sát (ví dụ, tại văn phòng), trong khi vẫn đang đăng nhập trên trang web của chúng ta. Trong trường hợp này, nếu cho phép thay đổi mật khẩu một cách đơn giản, thì kẻ xấu có ý đồ không tốt có thể đổi mật khẩu thành mật khẩu khác, điều này tất nhiên là rất tệ.
Cần phải thực hiện sao cho việc thay đổi sang mật khẩu mới yêu cầu nhập mật khẩu cũ.
Hãy cùng triển khai trang changePassword.php, khi truy cập vào đó người dùng sẽ thấy một biểu mẫu với hai ô nhập liệu - ô đầu tiên họ cần nhập mật khẩu cũ của mình, và ô thứ hai - mật khẩu mới:
<form action="" method="POST">
<input name="old_password">
<input name="new_password">
<input type="submit" name="submit">
</form>
Khi nhấn nút gửi, chúng ta cần thực hiện điều sau:
<?php
$id = $_SESSION['id']; // id người dùng từ session
$query = "SELECT * FROM users WHERE id='$id'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
$hash = $user['password']; // mật khẩu đã mã hóa từ CSDL
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
// Kiểm tra sự khớp nhau giữa hash từ cơ sở dữ liệu và mật khẩu cũ đã nhập
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 {
// mật khẩu cũ nhập không đúng, hiển thị thông báo
}
?>
Hãy triển khai chức năng thay đổi mật khẩu đã được mô tả.