我有一个方法来检查名为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