password_verify()
のように、ハッシュされていない生のパスワードを確認することになっています。 ハッシュされたパスワードの作成時に使用されたハッシュルーチンを使用して、生のパスワードの再ハッシュを行います。
password_hash()
の結果を見ると このハッシュを作成するために使用されたハッシュルーチンと、その生成方法に関する情報がハッシュに格納されています
$password = 'FredsTheMan';
$hash = password_hash($password, PASSWORD_BCRYPT);
if (password_verify($password, $hash)) {
return true;
} else {
return false;
}
この領域でよくあるもう1つの間違いは、データベーステーブルで使用する列に、ハッシュの完全な結果を保持するのに十分な文字を指定しないことです。
PASSWORD_BCRYPTを使用して生成されたハッシュは60文字です
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
他のハッシュがフルーレに提供されている場合、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;
}