PHP - password_verify issue


PHP - password_verify issue

我已经为此挠头 2 个多小时了。我研究过关于堆栈溢出的文章,包括:

  • Bcrypt未正确验证的问题

  • PHP password_hash和password_verify问题不匹配

  • "password_verify"调用返回 false 表示正确的密码

而且我无法纠正我的问题。我将不胜感激一些关于我是多么白痴的指导:

将数据插入MySQL数据库的函数:

function insertUser($userObj) {
    $query = $this->databaseConnection->getStntPrepare()->prepare(
            "INSERT INTO user(username, userpassword) VALUES (?,?);");
    $username = $userObj->getUsername();
    $password = password_hash('testing1234', PASSWORD_BCRYPT);
    $query->bind_param('ss', $username, $password);
}

通过从MySQL检索数据来验证用户登录:

function findUser($userObj) {
    $query = $this->databaseConnection->getStntPrepare()->prepare(
            "SELECT userid, userpassword 
                FROM user 
                WHERE username=?");
    $pass = 'testing1234'
    $query->bind_param('s', $userObj->getUsername());
    $query->execute();
    $query->bind_result($userid, $hash);
    while ($query->fetch()) {
        if (password_verify($pass, $hash)) {
            echo 'Password is valid!';
        } else {
            echo 'Invalid password.';
        }
    }
}

运行时,我得到"密码无效"。

当我在不插入数据库然后检索的情况下执行以下操作时:

$hash = password_hash('testing1234', PASSWORD_BCRYPT);
if (password_verify('testing1234', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}

我得到"密码有效!

我相信我的问题与密码字段中的单引号和双引号以及美元符号($)的解释有关,在从MySQL数据库存储/检索时,作为变量而不是文字(如其中一篇文章所建议的那样) - 但是我没有任何运气解决。以下是"testing1234"的哈希值:

$2y$10$1/oQEuYX67n.U3usxH.7tenNq7hT2dKyBSIZsy5xR3W

问题出在数据库中 - 与password_verify或password_hash无关。数据类型具有最大字符数(仅定义为 40,因为我在创建表时被 MySQL 要求)。移至 60 个,不再有问题。