Переход с md5 на password_hash - PullRequest
       1

Переход с md5 на password_hash

0 голосов
/ 11 июня 2019

Я следовал руководству по созданию cms, но инструктор использовал md5 для паролей, я пытаюсь изменить его на использование password_hash.Пароль, используемый в моей базе данных sql, использует password_hash, но я не понимаю, как его проверить на странице входа в систему.

Я пытался изменить md5 на password_hash на странице входа, но это не помогло.не работает, и я также пытался password_verify.Я знаю, что их следует использовать, но не могу понять, где и что мне следует изменить.

<?php

session_start();

include_once('../includes/connection.php');


if (isset($_SESSION['logged_in'])) {
    ?>
    <html>
    <head>
    <title>CMS Tutorial</title>
    <link rel="stylesheet" href="../assets/style.css"/>
    </head>

    <body>
        <div class="container">
        <a href="index.php" id="logo">CMS</a>

        <br />

        <ol>
            <li><a href="add.php">Add Article</a></li>
            <li><a href="delete.php">Delete Article</a></li>
            <li><a href="logout.php">Logout</a></li>

        </ol>


    </div>  
    </body>
</html>



    <?php

}else{
    if (isset($_POST['username'], $_POST['password'])) {
        $username = $_POST['username'];
        //$password = md5($_POST['password']);
        $password = password_hash($_POST['password'], PASSWORD_DEFAULT);

        if (empty($username) or empty($password)){
            $error = 'All fields are required!';
        }else{
            $query = $pdo->prepare("SELECT * FROM users WHERE user_name = ? AND user_password = ?");

            $query->bindValue(1, $username);
            $query->bindValue(2, $password);

            $query->execute();

            $num = $query->rowCount();

            if ($num == 1) {
                $_SESSION['logged_in'] = true;
                header('Location: index.php');
                exit();
                //user entered correct details
            }else{
                //user entered false details
                $error = 'Incorrect details!';
        }
    }
    }
    ?>

    <html>
    <head>
    <title>CMS Tutorial</title>
    <link rel="stylesheet" href="../assets/style.css"/>
    </head>

    <body>
        <div class="container">
        <a href="index.php" id="logo">CMS</a>

        <br /><br />

        <?php if (isset($error)) { ?>

        <small style="color:#aa0000"><?php echo $error; ?></small>
        <br /><br />

        <?php } ?>


        <form action="index.php" method="post" autocomplete="off">
            <input type="text" name="username" placeholder="Username" />
            <input type="password" name="password" placeholder="Password" />
            <input type="submit" value="Login" />
        </form> 
    </div>  
    </body>
<html>

    <?php
}

?>

В данный момент я просто получаю

«неверные данные» ошибки

, который я создал, и если я использую password_verify, я получаю

«все поля обязательны для заполнения»

1 Ответ

3 голосов
/ 11 июня 2019

Чтобы проверить пароль, вы должны использовать функцию password_verify() вместо password_hash().

Некоторое время назад я написал канонический пример Аутентификация пользователя с использованием PDO и password_verify () .

Как видите, код очень прост: вам просто нужно выбрать пароль, а затем сравнить его с помощью password_verify()

$stmt = $pdo->prepare("SELECT * FROM users WHERE user_name = ?");
$stmt->execute([$_POST['username']]);
$user = $stmt->fetch();

if ($user && password_verify($_POST['password'], $user['password']))
{
    $_SESSION['logged_in'] = true;
    header('Location: index.php');
    exit();
}else{
    $error = 'Incorrect details!';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...