Powinieneś sprawdzić surowe niezaszyfrowane hasło, ponieważ password_verify()
wykonuje ponowne zaszyfrowanie surowego hasła przy użyciu procedury mieszania używanej podczas tworzenia zaszyfrowanego hasła.
Jeśli spojrzysz na wynik password_hash()
w hashu przechowywane są informacje o tym, która procedura skrótu została użyta do utworzenia tego skrótu i jak został wygenerowany
$password = 'FredsTheMan';
$hash = password_hash($password, PASSWORD_BCRYPT);
if (password_verify($password, $hash)) {
return true;
} else {
return false;
}
Innym częstym błędem w tym obszarze jest to, że kolumna, której używasz w tabeli bazy danych, nie daje wystarczającej ilości znaków, aby pomieścić pełny wynik skrótu
Hash wygenerowany za pomocą PASSWORD_BCRYPT to 60 znaków
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Uwaga, jeśli w furure podane są inne skróty, mogą one skutkować hashem dłuższym niż 60 znaków
Więc w skrócie twój kod powinien być
$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;
}