Я хэшировал свои вставленные пароли через password_hash. Я проверяю их с помощью password_verify.
Однако, когда я вставляю хешированный пароль в свою базу данных и пытаюсь проверить его, оба вывода всегда отличаются друг от друга.
мои страницы следующие,
main_login.php (форма):
<?php include 'header.php';?>
<body>
<form role="form" method="post" action="login.php">
<div class="form-group">
<label for="usrname">Username:</label>
<input type="text" class="form-control" name="usrname" placeholder="Enter username">
</div>
<div class="form-group">
<label for="passwrd">Password:</label>
</div>
<input type="password" class="form-control" name="passwrd" placeholder="Enter password">
<br>
<input type="checkbox">Remember Me
<br>
<br>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</body>
</html>
login.php (обработчик):
<?php
include 'vars.php';
include 'header.php';
$sql="SELECT * FROM members WHERE usrname='$usrname'";
$result=mysqli_query($con,$sql);
$count=mysqli_num_rows($result);
$row=mysqli_fetch_row($result);
$verify=password_verify($hash,$row[2]);
if($verify){
$_SESSION["usrname"]=$usrname;
echo "Correct";
}
else {
echo "user: " . $usrname. "<br>";
echo "pass: " . $hash. "<br>";
echo "db: " . $row[2]."<br>";
echo "Wrong Username or Password";
}
?>
vars.php:
<?php
$h='localhost';$u='caelin';$p='****';$d='ombouwnh';
$con=mysqli_connect($h,$u,$p,$d);
$usrname=$_POST['usrname'];
$passwrd=$_POST['passwrd'];
$hash=password_hash($passwrd, PASSWORD_DEFAULT);
?>
Когда я пытаюсь войти в систему, используя имя пользователя ‘caca’ и пароль ‘caca’, я получаю разные выходные данные для каждого, каждый раз, когда я повторяю попытку.
Я не могу найти эту конкретную проблему на стеке потока
ТИА
PS. Если вам нужно больше деталей, попросите их
Функция password_verify();
принимает два параметра; вход без хеширования и сохраненный хеш для сравнения. Он автоматически хэширует входные данные, чтобы сравнить их с сохраненной версией. Таким образом, ваш первоначальный код повторно хэшировал уже хешированный пароль. Должно выглядеть так:
$verify=password_verify($_POST['passwrd'],$row[2]);
if($verify){
$_SESSION["usrname"]=$usrname;
echo "Correct";
}
else {
echo "user: " . $usrname. "<br>";
echo "pass: " . $hash. "<br>";
echo "db: " . $row[2]."<br>";
echo "Wrong Username or Password";
}
Вы перефразировали пароль — просто передайте незашифрованный пароль и ваш хэш (от db) до password_verify, и он работает.