Я начал использовать подготовленные MySQL заявления. Все работало правильно. Я написал в Code Review, чтобы узнать, были ли какие-либо непредвиденные ошибки или проблемы с безопасностью. Нашел здесь:
https://codereview.stackexchange.com/questions/194163/php-login-script
Я обновил свой код в соответствии с инструкциями, но столкнулся с проблемой password_verify. Вот код:
<?php
include('../include/sessions.php');
if(isset($_POST['username']))
{
$select = "SELECT username, firstname, lastname, email, userlevel, `password` FROM users WHERE username = ?;";
$stmt = $dbc->prepare($select);
$stmt->bind_param("s", $_POST['username']);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
if($row && password_verify($row['password'], $_POST['password']))
{
$_SESSION['user'] = $row;
header("Location: ../cust/home.php");
die;
}
else
{
echo "The username/password combination does not match our records. Please try again.";
}
}
?>
Подготовленный выше оператор выполняется соответственно. Я могу вернуть имя пользователя, имя, фамилию и т. Д. Но пароль не совпадает, хотя я ввожу его правильно.
Пароль базы данных был хеширован с помощью bcrypt. Я не уверен, что это играет роль в этой ошибке.
Поскольку пароль не может быть проверен, он, конечно, переходит к другому и повторяет, что пароль неверный.
Кто-нибудь видит проблему?
Сначала должен появиться пароль в виде открытого текста, а затем хешированный пароль из базы данных в соответствии с описанием функции. bool password_verify ( string $password , string $hash )
password_verify($_POST['password'], $row['password']))
Других решений пока нет …