我的password_verify()总是提供错误的帐户详细信息,但详细信息是正确的。 我的片段:
include('Application/Bootstrap.php');
if(isset($_SESSION['username'])) {
header('location: '.$config['website']['url'].'/me'); // Use this if the user HAS to login.
}
if (isset($_POST['submit'])) {
$username = $db->real_escape_string($_POST['username']);
$password = $db->real_escape_string($_POST['password']);
if (!$_POST['username'] || !$_POST['password']) {
echo 'Je moet een gebruikersnaam en wachtwoord invullen om in te loggen.';
}
else {
$check = $db->query("SELECT * FROM users WHERE username = '".$username."' and password = '".$password."'");
$row=mysqli_fetch_assoc($check);
if (password_verify($password, $row['password'])) { //I try $password AND $_POST['password']
$_SESSION['username'] = $_POST['username'];
header("Location: /me");
exit;
}
else {
// ALS HET NIET KLOPT!!!!
echo 'Je gegevens kloppen niet.'; }
}
}
有人能帮助我吗?我已经搜索了整个互联网。但我无法找到它。我的数据库列varcher增加到255.如果你问我的注册表是错误的,那不是这样。片段:
$db->query("INSERT INTO users
(username,password,mail,auth_ticket,motto,ip_reg)
VALUES ('$username', '".password_hash($pw, PASSWORD_BCRYPT, $options)."', '$mail', '$ticket', '$motto', '$ip')") or die($db->error);
费用为' 10'
我希望有人可以帮助我。
答案 0 :(得分:0)
您正在检查密码两次,第一次在SQL查询中检查密码:
$check = $db->query("SELECT * FROM users WHERE username = '".$username."' and password = '".$password."'");
|< remove this part >|
此查询只会找到具有给定用户名和且具有给定密码的用户。但由于只存储了密码的哈希值,因此该查询永远不会找到一行。您应该使用密码删除支票,并仅按用户名搜索用户。
为了避免SQL注入,您还应该使用parametrized queries。
$stmt = $db->prepare('SELECT * FROM users WHERE username = ?');
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
...
if (password_verify($_POST['password'], $row['password']))
{
...
}
$result->close();