Хеширование и password_verify

Я работаю с моим маленьким проектом PHP, и я пытаюсь реализовать хеширование при регистрации, и мне нужно проверить свой хешированный пароль, когда пользователь хочет войти. Я много пробовал, но на самом деле я не понимаю, как использовать пароль_verify в моем коде.

В моем register.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'); } } с $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?

Solutions Collecting From Web of "Хеширование и password_verify"

вы не хешируете пароль, который вводит пользователь в форму, а вы хэш-пароль, когда пользователь действительно регистрируется на вашем сайте

 $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' ; } } 

Вы также должны посмотреть на подготовленные заявления mysqli

Когда вы храните результат password_hash() в базе данных, вы храните хешированный пароль. Чтобы проверить правильность введенного пароля для входа в систему, вы можете сделать что-то вроде этого (псевдокод):

 $result = $db->getAssoc("SELECT password FROM users WHERE username='".$username."'"); if ($result) { if(password_verify($password, $result['password']){ //log the user in } } 

http://php.net/manual/en/function.password-verify.php