检查用户密码时出现password_verfiy问题

时间:2014-09-29 17:09:50

标签: php mysqli

我有一个方法来检查名为checkPassword的密码和另一个名为getUser的密码,检查它们是否存在,如果存在,则返回用户名和密码(这是我认为它出错的地方)

checkPassword方法:

public function checkPassword($username, $password)
{
   $info = $this->getUser($username);

   if ($info['exists'] == FALSE) {
       exit('The specified user does not exist!');
   }

    if (password_verify($password, $info['password']))
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }

}

getUser方法:

public function getUser($username)
{
    $userInfo = array(
    'username' => $username
    );

    if ( ! $stmt = $this->Connection()->prepare("SELECT * FROM " . $this->_info['Prefix'] . "users
    WHERE `".implode("`, `", array_keys($userInfo))."` = ?"))
    {
        echo 'Prepare Failed: ' . $stmt->error . '<br />';
        return FALSE;
    }

    if ( ! $stmt->bind_param('s', $userInfo['username']))
    {
        echo 'Bind Failed: ' . $stmt->error . '<br />';
        return FALSE;
    }

    if ( ! $stmt->execute())
    {
        echo 'Execute Failed: ' . $stmt->error . '<br />';
        return FALSE;
    }

    $stmt->store_result();
    $stmt->bind_result($row);

        if ($stmt->num_rows == 0)
        {
            $this->_user['exists'] = FALSE;
        }
        else
        {
            $this->_user['exists'] = TRUE;
        }

        while ($stmt->fetch())
        {
            $this->_user['username'] = $row['username'];
            $this->_user['password'] = $row['password'];
        }

        $stmt->close();
        return $this->_user;
}

要使用此功能,我有一个名为demo_test.php的单独文件来测试功能。所有其他方法(使用getUser方法)都可以正常工作,这是我尝试检查用户密码时唯一的失败。

这就是我在demo_test.php中所拥有的:

    <?php

// Require in file
require_once 'demo.php';

$User = new User('localhost', 'root', 'root', 'test', '8889', NULL);

if ($User->checkPassword('Test', 'Test'))
{
  echo 'Correct Password';
}
else
{
  echo 'Incorrect Password';
}

即使密码正确,我也会以Incorrect Password返回。密码列长度设置为255。

我做错了什么?

编辑(添加密码哈希方法)

private function passwordHash($string)
    {
        $encryption = array(
            'Password' => $string
        );
        $hashed_password = password_hash($encryption['Password'], PASSWORD_DEFAULT);
        return $hashed_password;
    }

这就是它的存储方式:

1   Matt    $2y$10$36xehsxDeQR6hC6WOO80IuKXb5Fm5fmKCnoB/8xtBPhWDFiKlvh8O

0 个答案:

没有答案