Я работаю с моим маленьким PHP-проектом и пытаюсь реализовать хеширование при регистрации, и мне нужно подтвердить свой хешированный пароль, когда пользователь хочет войти в систему. Я много пробовал, но не понимаю, как я могу использовать password_verify функция в моем коде.
В моем registration.php у меня есть код:
$username = $_POST['username'];
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$email = $_POST['email'];
Мой файл login.php выглядит так:
$username = $_POST['username'];
$password = $_POST['password'];
$username = htmlentities($username, ENT_QUOTES, "utf-8");
$password = htmlentities($password, ENT_QUOTES, "utf-8");
if ($result = @$connect_db->query(sprintf("SELECT * FROM users WHERE username='%s' AND password='%s'",
mysqli_real_escape_string($connect_db, $username),
mysqli_real_escape_string($connect_db, $password)))
) {
$amount = $result->num_rows;
if ($amount > 0) {
$_SESSION['logged_in'] = true;
$row = $result->fetch_assoc();
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['username'] = $row['username'];
$_SESSION['enter code hereemail'] = $row['email'];
$_SESSION['admin'] = $row['admin'];
unset($_SESSION['error']);
$result->free_result();
header('Location: dictionary.php');
} else {
$_SESSION['error'] = '<p class="error_m">Invalid username or password!</p>';
header('Location: index.php');
}
}
Мой вопрос о том, как использовать функцию password_verify в моем файле login.php?
вы не хешируете пароль, который пользователь вводит в форму, а вы хешируете пароль, когда пользователь фактически регистрируется на вашем сайте
$password = filter_var($_POST['aPass'] , FILTER_SANITIZE_STRING) ;
$newPassword = password_hash($password , PASSWORD_DEFAULT);
// input $newPassword into the database.
Для процесса входа и как использовать функцию password_verify
$username = filter_var($_POST['username'] , FILTER_SANITIZE_STRING);
$password = filter_var($_POST['password'],FILTER_SANITIZE_STRING);
// i assume the connection to the database has been established already
$check = mysqli_query($con , "SELECT passwordtable FROM tablename WHERE usertable=$username") ;
if(mysqli_num_rows($check) === 1){
//fetch the assoc data,would skip that
//since the data has been fetched,we can now use the password_verify function,assuming you saved the fetched data in a variable called $dbPass
if(password_verify($password , $dbPass)){
//the function takes in two parameters, the first being the inputted pass from your form and the second the hashed password from the database
header('Location: dictionary.php');
exit();
} else {
echo 'Invalid password' ;
}
}
Вы также должны посмотреть на подготовленные заявления MySQL
Когда вы сохраняете результат password_hash()
в базе данных вы храните хешированный пароль. Чтобы проверить, правильно ли введен пароль для входа в систему, вы можете сделать что-то вроде этого (псевдокод):
$result = $db->getAssoc("SELECT password FROM users WHERE username='".$username."'");
if ($result) {
if(password_verify($password, $result['password']){
//log the user in
}
}