Bạn phải kiểm tra mật khẩu chưa băm thô, là password_verify()
băm lại mật khẩu thô bằng cách sử dụng quy trình băm được sử dụng khi tạo mật khẩu đã băm.
Nếu bạn nhìn vào kết quả của password_hash()
có thông tin được lưu trữ trong hàm băm về quy trình băm nào đã được sử dụng để tạo hàm băm này và cách nó được tạo ra
$password = 'FredsTheMan';
$hash = password_hash($password, PASSWORD_BCRYPT);
if (password_verify($password, $hash)) {
return true;
} else {
return false;
}
Một lỗi phổ biến khác trong lĩnh vực này là không cung cấp cho cột bạn sử dụng trên bảng cơ sở dữ liệu đủ ký tự để chứa toàn bộ kết quả của hàm băm
Hàm băm được tạo bằng PASSWORD_BCRYPT có 60 ký tự
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Hãy lưu ý, khi các hàm băm khác được cung cấp trong nội dung, chúng có thể dẫn đến một hàm băm dài hơn 60 ký tự
Vì vậy, trong ngắn hạn, mã của bạn phải là
$this->db->select('password');
$this->db->from('usersdetails');
$this->db->where('email', $email);
$this->db->limit(1);
$query = $this->db->get();
$pwd_from_db = $query->row()->password;
if (password_verify($this->input->post('password'), $pwd_from_db)) {
return true;
} else {
return false;
}