У меня возникают проблемы с использованием password_verify
для аутентификации пользователя с паролем. Когда я использовал md5
, он работал нормально. Но он больше не работает.как аутентифицировать логин с password_verify в php
Что случилось с моим кодом (я не включил сессия):
<---php process --->
<?php
$error = array();
$usererr = $passerr = "";
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!isset($_POST['username']) || empty($_POST['username'])) {
$error[] = 'username';
$usererr = "username cannot be empty";
} else {
$preg = $_POST['username'];
if (!preg_match("/^[a-zA-Z]*$/", $preg)) {
$error [] = 'username';
$usererr = "only letters are allowed";
}
}
if (!isset($_POST['password']) || empty($_POST['password'])) {
$error[] = 'password';
$passerr = "password cannot be empty";
}
if (empty($error)) {
//check to see if username and the hashed password exist there
$username = mysql_prep($_POST['username']);
$password = mysql_prep($_POST['password']);
//perform sql query to select all data
$sql = " SELECT * FROM tbl_staff WHERE username = '{$username}' ";
$result = mysqli_query($link, $sql);
confirm_query($result); //confirm query if true
while ($result_set = mysqli_fetch_array($result)) {
if (password_verify($_POST['password'], $result_set['hashed_password'])) {
echo $password;
header("location:staff.php");
} else {
$message = "Username/password combo was not found in the database<br> Please Try again";
}
}
}//end of empty
else {
if (count($error) == 1) {
$post_info = "There was " . count($error) . " error ";
} else {
$post_info = "There were " . count($error) . " error ";
}
}//end of empty error
}//end of request method
?>
html form for login.
<table class = "table">
<tr><td class = "nav"><a href = "staff.php">Return To Menu</a></td>
<td class = "content">
<p><?php
if (!empty($message)) {
echo $message . "<br>";
}
if (!empty($error)) {
foreach ($error as $errors) {
echo"<p>" . " - " . $errors . " field contains error" . "</p>";
}
}
?></p>
<p class="error">*required fields</p>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>" method="post" >
<h1 style="font-size:36px;">Login</h1>
<p align="left" ><br>
<label>Username</label>
<input maxlength="30" name="username" type="text" value="<?php
if (!empty($usererr)) {
echo $_POST['username'];
};
?>"/>
<span class="error">*</span><?php echo $usererr ?></p><br>
<label>
Password</label>
<input name="password" maxlength="30" type="text" value=""/><span class=
"error">*</span><?php echo $passerr ?>
</p>
<p> </p>
<p align="left">
<input name="create" type="submit" value="Login ">
</p>
</form>
</td>
</tr>
</table>
?>
Измените свой код, чтобы удалить ненужные пустые строки. Нет необходимости делать это трудным для людей здесь, чтобы прокручивать через ненужные пустые разделы кода. – Anthon
Если вы находитесь на PHP-версии <5.5, посмотрите на эту библиотеку: https://github.com/ircmaxell/password_compat – Stanimir