Трябва да проверите необработената нехеширана парола, като password_verify()
извършва повторното хеширане на необработената парола с помощта на рутинната хеширане, използвана при създаване на хеширана парола.
Ако погледнете резултата от password_hash()
има информация, съхранявана в хеша за това коя хеш рутина е била използвана за създаване на този хеш и как е генериран
$password = 'FredsTheMan';
$hash = password_hash($password, PASSWORD_BCRYPT);
if (password_verify($password, $hash)) {
return true;
} else {
return false;
}
Друга често срещана грешка в тази област е, че колоната, която използвате в таблицата на базата данни, не дава достатъчно знаци, за да задържи пълния резултат от хеша
Хешът, генериран с помощта на PASSWORD_BCRYPT, е 60 знака
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Внимавайте, когато други хешове са предоставени във furure, те могат да доведат до хеш, по-дълъг от 60 знака
Така че накратко вашият код трябва да бъде
$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;
}