Dovresti controllare la password grezza senza hash, come password_verify()
esegue il rehashing della password grezza utilizzando la routine hash utilizzata durante la creazione della password con hash.
Se guardi il risultato di password_hash()
ci sono informazioni memorizzate nell'hash su quale routine hash è stata utilizzata per creare questo hash e come è stato generato
$password = 'FredsTheMan';
$hash = password_hash($password, PASSWORD_BCRYPT);
if (password_verify($password, $hash)) {
return true;
} else {
return false;
}
Un altro errore comune in quest'area è non fornire alla colonna che utilizzi nella tabella del database caratteri sufficienti per contenere l'intero risultato dell'hash
L'hash generato utilizzando PASSWORD_BCRYPT è di 60 caratteri
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Attenzione, quando vengono forniti altri hash nel furure, potrebbero risultare in un hash più lungo di 60 caratteri
Quindi in breve il tuo codice dovrebbe essere
$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;
}