Так что я хэшировал строку "test"
$hash = password_hash("test", PASSWORD_DEFAULT);
Сохраненный в моем поле пароля (varchar 255)
Затем я сделал простую пробную страницу входа в систему
if (!empty($_POST['username']) && !empty($_POST['password']))
{
$username = trim($_POST['username']);
$password = trim($_POST['password']);
$stmt = $db->prepare("SELECT username, password FROM users WHERE username = ? AND password = ?");
$stmt->execute(array($username, $password));
$row = $stmt->fetch();
$hash = $row['password'];
if (password_verify($password, $hash)) {
//success
} else {
//wrong credentials
}
Затем я ввожу свой логин и пароль test
, но возвращать ложь, когда он должен вернуть истинный (но, очевидно, им неправильно, так как это не делают, им - то здесь отсутствует)
Что я здесь делаю неправильно?
Читал много об этом, но я не могу понять, почему это не вернет истину. Обратите внимание, что я новичок.
И почему соль, я думаю, первые 6 символов, которая начинается в хеше, всегда одна и та же? $2y$10
. Это не может быть хорошо.
Я предполагаю, что вы храните хешированный пароль в базе данных.
В предложении where вам нужно передать хешированный пароль, а не обычный текст
$stmt->execute(array($username, password_hash($password)));
То же самое в утверждении if, убедитесь, что оба хешированы