如何修复我的 PHP 密码验证码?

How do I fix my PHP password verify code?

我的项目的登录检查/密码验证代码有问题。我已经实现了搜索数据库以查找数据的代码 (username/password),但我想验证该数据,并且由于散列,我认为 PHP 无法找到数据。

代码在下面,任何方法和建议将不胜感激

h2>Administrator Login</h2>
            <form action="adminportal.php" method="post">
                <label>Username</label> <input type="text" name="adminun"/>
                <label>Password</label> <input type="password" name="adminpw"/>

                <input type="submit" name="submit" value="Submit" />
            </form>

<?php
if (isset($_POST['submit'])) {

$stmt = $pdo->prepare('SELECT * FROM admin WHERE username = :username AND password = :password');
$values = [
 'username' => $_POST['adminun'],
 'password' => sha1($_POST['adminun'] . $_POST['adminpw'])
];
$stmt->execute($values);
$user = $stmt->fetch();

if (password_verify($_POST['adminpw'], $user['password'])) {
 $_SESSION['loggedin'] = $user['id'];
}
else {
 echo 'Sorry, your account could not be found';
}
}

?>

Select 仅基于用户名,不基于密码。

$stmt = $pdo->prepare('SELECT * FROM admin WHERE username = :username');
$values = [
    'username' => $_POST['adminun'],
];
$stmt->execute($values);
$user = $stmt->fetch();

然后使用password_verify根据用户记录中的密码验证发布的密码。

if (password_verify($_POST['adminpw'], $user['password'])) {
    $_SESSION['loggedin'] = $user['id'];
}
else {
    echo 'Sorry, your account could not be found';
}

仅当存储在数据库中的密码使用 password_hash 进行哈希处理时才有效。

我认为你的 sql 应该 select 像这样首先仅基于用户名

$stmt = $pdo->prepare('SELECT * FROM admin WHERE username = :username');
$values = [
    'username' => $_POST['adminun'],
];
$stmt->execute($values);
$user = $stmt->fetch();

然后使用password_verify()验证密码