Я создал систему, которая позволяет администратору регистрировать другого администратора с адресом электронной почты и паролем для входа в защищенную область. Администратор регистрируется через эту форму:Почему мой вход в систему не работает?
<form action="adduser.php" method="POST">
<label for="emailaddress">Email Address: </label><input type="text" name="emailaddress" />
<label for="password">Password: </label><input type="password" name="password" />
<label for="name">Name: </label><input type="text" name="name"/>
<input type="submit" value="Submit" name="submit"/>
</form>
adduser.php выглядит следующим образом:
<?php
require'databaselogin.php';
if(isset($_POST['emailaddress'],$_POST['password'],$_POST['name'])){
$result= $pdo->prepare('INSERT INTO users (emailaddress, password, name)
VALUES(:emailaddress, :password, :name)');
$hash = password_hash($_POST['password'], PASSWORD_DEFAULT);
unset($_POST['submit']);
$_POST['password'] = $hash;
$result->execute($_POST);
header("Location:admin.php");
}
?>
До здесь, кажется, работает на таблицу с именем пользователи, то получает заполняется данными. Я предполагаю, что потенциально это могло бы использовать $ hash неправильно, чем пароль, хранящийся в таблице, не то, что пользователь вводил в поле пароля?
Когда пользователь пытается войти в систему, используя эту форму:
<form action="login.php" method="POST" >
<label for="emailaddress">Email Address:</label><input type="text" name="emailaddress"/>
<label for="password">Password:</label><input type="password" name="password"/>
<input type="submit" value="Go" name="submit"/>
</form>
ссылки на этот PHP:
<?php
session_start();
require'databaselogin.php';
$stmt = $pdo->prepare('SELECT * FROM users WHERE emailaddress = :emailaddress');
if(isset($_POST['submit'])){
$criteria = [
'emailaddress' => $_POST['emailaddress'],
];
$stmt->execute($criteria);
$user = $stmt->fetch();
var_dump($user);
if (password_verify($_POST['password'], $user['password'])) {
$_SESSION['loggedin'] = $user['id'];
header("Location:admin.php");
}
else {
header("Location:index.php");
}
}
?>
С правильной электронной почты и пароль, введенный в регистрации с сайта только перезагружает на index.php, а не доставлять их admin.php. Я действительно не могу понять эту проблему здесь, поскольку код тоже выглядит слишком. Я предполагаю, что это проблема с тем, что $ hash фактически сохраняет в поле пароля.
Если кто-то может помочь с этим, это было бы действительно оценено!
Как об этом, зарегистрировать пользователя с простым паролем, как 1234 и проверьте таблицу для хранимой хэш. Затем повторите хеширование 1234, используя тот же метод, посмотрите, соответствуют ли строки. Если они это сделают, проблема не имеет ничего общего с хэшем. – Abdel
и, какова длина столбца паролей? Если он слишком короткий, он терпит неудачу для вас * тихо *. –
Каков результат 'var_dump ($ user)'? –