Этот код работал нормально, пока я не начал хэшировать пароли после того, как пользователи зарегистрировались. Я использую стандартную функцию
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>";
}
}
Вы должны проверить пароль, предоставленный пользователем, с хешем, хранящимся в вашей базе данных.
Таким образом, вы должны сделать что-то вроде этого:
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
}
}
Других решений пока нет …