РЕДАКТИРОВАТЬ: Чтобы уточнить, я не могу извлечь хешированный пароль из моей базы данных, используя подготовленные заявления.
Я пытаюсь создать систему входа в систему, которая использует подготовленные операторы, password_hash и password_verify.
Я создал регистрационную форму, которая создает пользователя с хешированным паролем, используя password_hash($_POST['password'], PASSWORD_DEFAULT);
Это работает правильно.
Однако я застрял при создании формы для входа.
Я пытаюсь получить хэш пароля, который сохраняется при регистрации пользователя, но я не могу заставить его работать с подготовленными утверждениями.
Это то, что у меня сейчас есть.
<?php
require('db.php');
if(isset($_POST['submit'])) {
$stmt = $connect->prepare('SELECT user_name, user_password FROM `users` WHERE user_name = ?');
if($stmt) {
$username = $_POST['username'];
$password = $_POST['password'];
$stmt->bind_param('s', $username);
$stmt->execute();
}
}
?>
Как использовать данные, полученные из запроса на выборку? И как мне использовать его для подтверждения пароля?
Я пытался:
$stmt->store_result();
$stmt->bind_result($loginUsername, $hash);
Это хранит только имя пользователя, но не хеш пароля, и я понятия не имею, почему.
Проверка пароля будет использовать это?
password_verify($password, $hash);
UPDATE
<?php
require('db.php');
if(isset($_POST['submit'])) {
$stmt = $connect->prepare('SELECT user_name, user_password FROM `users` WHERE user_name = ?');
if($stmt) {
$username = $_POST['username'];
$password = $_POST['password'];
$stmt->bind_param('s', $username);
$stmt->execute();
// Get query results
$result = $stmt->get_result();
// Fetch the query results in a row
while($row = $result->fetch_assoc()) {
$hash = $row['user_password'];
$username = $row['user_name'];
}
// Verify user's password $password being input and $hash being the stored hash
if(password_verify($password, $hash)) {
// Password is correct
} else {
// Password is incorrect
}
}
}
?>