Хеширование и проверка пароля

php hash login passwords verification

1137 просмотра

2 ответа

Я работаю с моим маленьким 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?

Автор: ShabbyAbby Источник Размещён: 12.11.2019 09:14

Ответы (2)


0 плюса

Решение

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

$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 подготовленные заявления

Автор: adelowo Размещён: 26.05.2015 05:00

1 плюс

Когда вы сохраняете результат 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

Автор: Andrew Размещён: 26.05.2015 04:57
Вопросы из категории :
32x32