以下是我的密码处理程序的代码

    protected function passwordMatch($username, $password)
    {
        $sql = 'SELECT `username`, `password` FROM `profile` WHERE `username` = ?';
        $stmt = $this->connect()->prepare($sql);
        $stmt->execute([$username]);
        $result = $stmt->fetch();
        if (password_verify($result['password'], $password)) {
            return true;
        }
        return false;
    }
        if ($this->passwordMatch($this->username, $this->password) !== true) {
            $_SESSION['error'] = 'Password not matching';
            header('Location: ../login.php');
            exit();
        }

预期:如果用户名和密码匹配,则用户将登录 try :我try 从!==更改为===,看看这是否可以解决问题,但即使密码不匹配,它也会让用户登录,否则我无法判断我的代码出了什么问题

如果你想在这里看到完整的代码:https://github.com/sammo-2000/login

推荐答案

我已经判断了你的GitHub源代码.

首先,您必须在db中扩展密码长度字段.

ALTER TABLE `profile` 
MODIFY COLUMN `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL AFTER `username`;

然后请使用Password_Verify()函数.

$sql = 'SELECT `username`, `password` FROM `profile` WHERE `username` = ?';
    $stmt = $this->connect()->prepare($sql);
    $stmt->execute([$username]);
    $result = $stmt->fetch();
    if(password_verify($password, $result["password"] )) {
        
        return true;
    }
    return false;

Php相关问答推荐

无法使用PHP DomDocument找到IMG元素

允许Laravel路由指定`withTrashed`,尽管有显式的模型绑定

Laravel:从匹配的数组数据中获取记录

我如何知道BaseController中当前运行的是哪个控制器?

以编程方式更新现有Yith WooCommerce Booking的状态

无法在Laravel/Vue停靠容器中启动MySQL

在PHP中读取JSON

在laravel 9或10 php中向中间件响应添加自定义数据

文件::Files()响应返回空对象数组

shell_exec运行大型数据处理

未定义的类型';PDF';在Laravel 8

如何从phpseclib和SFTP获取日志(log)记录?

在WooCommerce循环中添加子类别和产品之间的分隔符

允许在WooCommerce管理订单列表中使用计费邮箱进行搜索

既然setSQLLogger()已被弃用,如何使用中间件在 Doctrine 3 中记录查询执行时间?

如果在 APIPlatform 3.1 中的同一资源上使用处理器,Messenger 将无法工作

致命错误:未捕获 Google_Exception:客户端机密 JSON 文件无效.在 /somepath/lib/vendor/google/apiclient/src/Google/Client.php

如何搜索和替换 XML 文件中的一段文本?

如何使用属性创建属性预设?

如何将文件直接上传到 Cloudinary 而不先保存在 public 文件夹中