我的项目的登录检查/密码验证代码有问题。我已经实现了搜索数据库以查找数据(用户名/密码)的代码,但是我想验证该数据,并且由于散列,我认为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';
}
}
?>
2条答案
按热度按时间mkh04yzy1#
选择仅基于用户名,而不是密码。
然后使用
password_verify
根据用户记录中的密码验证发布的密码。只有在数据库中存储的密码被哈希处理时,这才起作用
password_hash
.6fe3ivhb2#
我认为您的sql应该首先像这样选择baseonlyusername
然后使用password\u verify()验证密码