我的项目的登录检查/密码验证代码有问题。我已经实现了用于搜索数据库以查找数据(用户名/密码)的代码,但是我想验证该数据,并且由于散列,我认为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';
}
}
?>
答案 0 :(得分:2)
仅根据用户名而不是密码进行选择。
$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
进行哈希处理时,此选项才有效。
答案 1 :(得分:0)
我认为您的sql应该只像这样首先基于用户名进行选择
$stmt = $pdo->prepare('SELECT * FROM admin WHERE username = :username');
$values = [
'username' => $_POST['adminun'],
];
$stmt->execute($values);
$user = $stmt->fetch();
然后使用password_verify()验证密码