Vous êtes censé vérifier le mot de passe brut non haché, comme le password_verify()
effectue le rehachage du mot de passe brut à l'aide de la routine de hachage utilisée lors de la création du mot de passe haché.
Si vous regardez le résultat du password_hash()
il y a des informations stockées dans le hachage sur quelle routine de hachage a été utilisée pour créer ce hachage et comment il a été généré
$password = 'FredsTheMan';
$hash = password_hash($password, PASSWORD_BCRYPT);
if (password_verify($password, $hash)) {
return true;
} else {
return false;
}
Une autre erreur courante dans ce domaine est de ne pas donner à la colonne que vous utilisez dans la table de base de données suffisamment de caractères pour contenir le résultat complet du hachage
Le hachage généré à l'aide de PASSWORD_BCRYPT est de 60 caractères
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Attention, lorsque d'autres hachages sont fournis dans la furure, ils peuvent entraîner un hachage de plus de 60 caractères
Donc, en bref, votre code devrait être
$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;
}