J'ai créé un système qui permet à un administrateur d'enregistrer un autre administrateur avec une adresse e-mail et un mot de passe pour se connecter à une zone protégée. Un administrateur est enregistré par ce formulaire:Pourquoi mon système de connexion ne fonctionne-t-il pas?
<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>
Le adduser.php ressemble à ceci:
<?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");
}
?>
Jusqu'à ici semble fonctionner la table appelée utilisateurs obtient ensuite rempli avec des données. Je suppose que potentiellement il pourrait utiliser $ hash incorrectement que le mot de passe stocké dans la table n'est pas ce que l'utilisateur a entré dans le champ mot de passe?
Lorsque l'utilisateur tente de se connecter en utilisant ce formulaire:
<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>
Liens vers ce 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");
}
}
?>
Avec l'e-mail et mot de passe entré dans l'enregistrement à partir du site juste rechargements sur index.php plutôt que de les emmener à admin.php. Je n'arrive vraiment pas à comprendre le problème ici car le code semble être trop clair. Je suppose que c'est un problème avec ce que $ hash enregistre réellement dans le champ mot de passe.
Si quelqu'un peut aider avec ceci ce serait vraiment apprécié!
Qu'en est-ce, inscrivez-vous un utilisateur avec un mot de passe simple comme 1234 et vérifier votre table pour le hachage stocké. Ensuite, faites écho à un hashed 1234 en utilisant la même méthode, regardez si les chaînes correspondent. S'ils le font, le problème n'a rien à voir avec le hachage. – Abdel
et, quelle est la longueur de la colonne de mot de passe? Si c'est trop court, il échoue pour vous * en silence *. –
Quel est le résultat de 'var_dump ($ user)'? –