Сценарий входа: два оператора if

Этот код работал нормально, пока я не начал хэшировать пароли после того, как пользователи зарегистрировались. Я использую стандартную функцию

password_hash()

Это хэширует мои пароли в таблице пользователей. Однако я заметил, что они не могут войти без другой функции, которая проверяет, что они вводят правильный пароль. Это говорит мне, что я должен использовать password_verify в таком утверждении.

if (password_verify($password, $hash)) {
// Success!
}
else {
// Invalid credentials
}

Однако в моем сценарии входа в систему уже есть оператор if, и я не уверен, как их объединить. Я пробовал это:

if(isset($_POST['Login']) && (password_verify($password, $hash))){

Но это тоже не работает.
Может ли кто-нибудь дать мне предложение о том, что я мог бы сделать? Вот весь сценарий входа в систему (я уже подключился к БД), и мне просто нужно добавить оператор if для хешированного пароля.

if(isset($_POST['Login'])){$Username = mysqli_real_escape_string($con,$_POST['Username']);
$UserPassword = mysqli_real_escape_string($con,$_POST['UserPassword']);
$sel_user = "select * from users where Username='$Username' AND UserPassword='$UserPassword'";
$run_user = mysqli_query($con, $sel_user);
$check_user = mysqli_num_rows($run_user);

if($check_user>0){
session_start();
$_SESSION['Username']=$Username;

header('Location: index.php');
}

else {
header('Location: login.php');
echo "<p>". "Wrong password or username" . "</p>";

}
}

-1

Решение

Вы должны проверить пароль, предоставленный пользователем, с хешем, хранящимся в вашей базе данных.
Таким образом, вы должны сделать что-то вроде этого:

if (isset($_POST['login']) {
//check for if password is provided
//some code to verify user login in database and if exists get password
//hash for this login like this
$query = mysqli_query($con,"select hash from users where
username=".$login); //or some error proccessing
if (mysqli_num_rows($query) == 0) {
//incorrect login proccesing
}
$hash = mysqli_fetch_assoc($query)['hash'];
if (!password_verify($password,$hash)) {
//wrong passsword proccesing
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]