По сути, я только начал работать с PHP и пытаюсь разобраться с функцией password_hash. Когда пользователь регистрируется, я хэширую его пароль, используя:
$hashed_password = password_hash($p, PASSWORD_DEFAULT);
Затем этот хешированный пароль сохраняется в моей базе данных. Затем я хочу восстановить пароль для входа в систему. Итак, мой код написан так, что после отправки формы строки электронной почты и пароля очищаются, проверяются, не являются ли они пустыми, после этого я беру введенный пользователем пароль и хеширую его, используя:
$hash = password_hash($password, PASSWORD_DEFAULT);
Снова. После этого я подключаюсь к своей БД и пытаюсь выбрать пользователя, используя:
$q = "SELECT * FROM users
WHERE email='$email' AND password='$hash'";
Тем не мение. При отладке я заметил, что пользователь ввел строку, несмотря на то, что она совпадает со строкой, введенной при регистрации, отличается при хешировании. так что я повторяю $ hash и получаю:
$2y$10$LQ55Q1DUqIgRx/2hgnbrnuQrYvrrBrq4WEFmV8TuxII6rDocaWzt2
но точно такая же строка «пароль» хранится в БД как:
$2y$10$omNPA7cviUm.6asuhJIJ8Or.m9WeHhJMkCqYYijel5g.NflbdVnV.
Как получить, чтобы, когда пользователь вводит свой пароль, он хэширует строку и совпадает с паролем в БД, чтобы он мог войти в систему? Я что-то пропустил
ура
Вам нужно что-то вроде этого:
$hashed_password = mysql_result(mysql_query("SELECT password FROM users WHERE email='$email'"));
$match = password_verify( $password, $hashed_password );
if($match){
echo 'Password is valid';
} else {
echo 'Password is not valid' ;
}
Других решений пока нет …