PHP Система входа в систему - password_verify возвращает false, даже если пароль правильный - PullRequest
0 голосов
/ 17 июня 2020

Сейчас я пытаюсь создать систему входа в систему на основе элементов в базе данных. Прямо сейчас это то, что у меня есть - на основе видео - но когда я пытаюсь войти в систему с правильным паролем, я всегда получаю сообщение об ошибке, что пароль ($ pwcheck) неверен.

Я новичок на PHP, и я не знаю, как это исправить. Любая помощь будет принята с благодарностью!

<?php
if (isset($_POST['login-submit'])) {
    require 'dbh.inc.php';
    $fname = $_POST['fname'];
    $lname = $_POST['lname'];
    $empid = $_POST['empid'];
    $password = $_POST['password'];
    if (empty($fname) || empty($lname) || empty($empid) || empty($password)) {
        header('Location: ../admin_login.php?error=emptyfields&fname='.$fname."&lname=".$lname);
        exit();
    } else {
        $sql = 'SELECT * FROM employee WHERE first_name=? AND last_name=? AND emp_id=?;';
        $stmt = mysqli_stmt_init($conn);
        if (!mysqli_stmt_prepare($stmt, $sql)) {
            header('Location: ../admin_login.php?error=sqlerror');
            exit();
        } else {
            mysqli_stmt_bind_param($stmt, 'sss', $fname, $lname, $empid);
            mysqli_stmt_execute($stmt);
            $result = mysqli_stmt_get_result($stmt);
            if ($row = mysqli_fetch_assoc($result)) {
                $pwcheck = mysqli_password_verify($password, $row['admin_password']);
                if (!$pwcheck) {
                    header('Location: ../admin_login.php?error=incorrectpassword');
                    exit();
                } else {
                    session_start();
                    $_SESSION['fname'] = $row['first_name'];
                    $_SESSION['lname'] = $row['last_name'];
                    header('Location: ../admin_page.php');
                    exit();
                }
            } else {
                header('Location: ../admin_login.php?error=nouserfound');
                exit();
            }
        }
    }
} else {

    header('Location: ../admin_login.php');
    exit();
}

1 Ответ

0 голосов
/ 17 июня 2020

Думаю, @timBrownlaw справился с этим.

mysqli_password_verify () не является функцией, которую я узнаю. Если вы сравниваете пароль с сохраненным ha sh (надеюсь, именно так вы храните пароли), тогда вам понадобится password_verify () https://www.php.net/manual/en/function.password-verify.php

Попробуйте это вместо этого, тогда $ pwcheck не должен быть ложным, если они совпадают.

Если вы хотите узнать больше о безопасном хешировании паролей для хранения, https://www.php.net/manual/en/function.password-hash.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...