Проверка пароля всегда не удается - PullRequest
0 голосов
/ 02 апреля 2019

Пароль хэшируется и вводится в БД, когда я пытаюсь проверить его, он возвращает ложь каждый раз, когда я повторяю вводимый пароль, и пароль БД в столбце базы данных имеет правильный размер

<?php

require_once('dbconfig.php');

class USER
{   

    private $conn;

    public function __construct()
    {
        $database = new Database();
        $db = $database->dbConnection();
        $this->conn = $db;
    }

    public function runQuery($sql)
    {
        $stmt = $this->conn->prepare($sql);
        return $stmt;
    }

    public function register($uname, $umail, $upass)
    {
        try
        {
            $new_password = password_hash($upass, PASSWORD_DEFAULT);

            $stmt = $this->conn->prepare("INSERT INTO USERS(USERNAME, EMAIL, PASSWORD) VALUES(:uname, :umail, :upass)");

            $stmt->bindparam(":uname", $uname);
            $stmt->bindparam(":umail", $umail);
            $stmt->bindparam(":upass", $new_password);                                        

            $stmt->execute();   

            return $stmt;   
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }               
    }


    public function doLogin($uname, $umail, $upass)
    {
        try
        {
            $stmt = "SELECT USERID, USERNAME, EMAIL, PASSWORD, FIRSTNAME FROM USERS WHERE USERNAME = :uname OR EMAIL = :umail ";
            $stmt = $this->conn->prepare($stmt, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
            $stmt->bindparam(':uname', $uname);
            $stmt->bindparam(':umail', $umail);
            $stmt->execute();
            $userRow = $stmt->fetch(PDO::FETCH_ASSOC);
            $db_password = $userRow['PASSWORD'];

            $sql = "SELECT COUNT(*) FROM USERS WHERE USERNAME = :uname OR EMAIL = :umail";
            $sql = $this->conn->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
            $sql->bindparam(':uname', $uname);
            $sql->bindparam(':umail', $umail);
            $sql->Execute();
            $row = $sql->fetch(PDO::FETCH_ASSOC);
            if($row == 1)
            {
                if(password_verify($upass, $userRow['PASSWORD']))
                {
                    $_SESSION['USER_SESSION'] = $userRow['USERID'];
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }

    public function is_loggedin()
    {
        if(isset($_SESSION['USER_SESSION']))
        {
            return true;
        }
    }

    public function redirect($url)
    {
        header("Location: $url");
    }

    public function doLogout()
    {
        session_destroy();
        unset($_SESSION['USER_SESSION']);
        return true;
    }
}
?>

изменить код, я добавил весь пользовательский класс, но он по-прежнему возвращает ложь, пароль в БД выглядит примерно так: $ 2y $ 10 $ 16aMCo14n.QyON8dFsaFL..6Fi92LuBdWMCI3eAv3WHKJTblJKQ6q столбец в БД установлен в 5)пустой

...