Я получаю пароль не совпадает, когда я вхожу в систему, когда пользователь регистрируется, я сохраняю пароль как
$password = password_hash($this->input->post('password'), PASSWORD_BCRYPT);
когда логин пользователя я проверяю пароль как это,
$hash = password_hash($password, PASSWORD_BCRYPT); $this->db->select('password'); $this->db->from('usersdetails'); $this->db->where('email', $email); $this->db->limit(1); $query = $this->db->get(); $passwordcheck = $query->row()->password; if (password_verify($passwordcheck, $hash)) { return true; } else { return false; }
НО он всегда возвращает пароль не соответствует..why ????? Любая помощь высоко ценится…
Вы должны проверить необработанный неподтвержденный пароль, так как password_verify()
выполняет повторное хеширование необработанного пароля с помощью хэш-процедуры, используемой при создании хешированного пароля.
Если вы посмотрите на результат password_hash()
в хеше хранится информация о том, какая хэш-процедура была использована для создания этого хеша, и как он был сгенерирован
$password = 'FredsTheMan'; $hash = password_hash($password, PASSWORD_BCRYPT); if (password_verify($password, $hash)) { return true; } else { return false; }
Еще одна распространенная ошибка в этой области – не дать столбцу, который вы используете в таблице базы данных, достаточно символов, чтобы сохранить полный результат хэша
Хэш, созданный с использованием 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; }