Het is de bedoeling dat u het onbewerkte, niet-gehashte wachtwoord controleert, zoals de password_verify()
doet het opnieuw hashen van het onbewerkte wachtwoord met behulp van de hash-routine die wordt gebruikt bij het maken van het gehashte wachtwoord.
Als je kijkt naar het resultaat van de password_hash()
er is informatie opgeslagen in de hash over welke hash-routine is gebruikt om deze hash te maken en hoe deze is gegenereerd
$password = 'FredsTheMan';
$hash = password_hash($password, PASSWORD_BCRYPT);
if (password_verify($password, $hash)) {
return true;
} else {
return false;
}
Een andere veelgemaakte fout op dit gebied is dat u de kolom die u in de databasetabel gebruikt niet genoeg tekens geeft om het volledige resultaat van de hash te bevatten
De hash gegenereerd met PASSWORD_BCRYPT is 60 tekens
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Pas op, als er in de toekomst andere hashes worden verstrekt, kunnen deze resulteren in een hash die langer is dan 60 tekens
Dus in het kort zou je code
. moeten zijn$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;
}