PHP & MYSQL: à l'aide de bcrypt de hachage et de vérification de mot de passe de la base de données
Je suis l'aide de M. Andrew Moore méthode (Comment utilisez-vous bcrypt pour le hachage des mots de passe en PHP?) de hachage du mot de passe utilisateur. Ce que j'ai fait c'est que j'ai une page d'inscription et il utilise
$bcrypt = new Bcrypt(12);
$pass = $_POST['password']; //register password field
$hash= $bcrypt->hash($pass);
//then inserts $hash into database with users registered email (I've checked my mysql database and it indeed has an hashed item
Puis j'ai une page de login, composé de courriel et le mot de passe dans les champs. Ma pensée est que les adresses e-mail sont uniques dans ma base de données. Donc, avec cela à l'esprit, j'ai fait un script où il vérifier les utilisateurs de l'adresse email d'abord, puis si il y a un existant, vérifier le hachage de mot de passe avec ce
$bcrypt = new Bcrypt(12);
$email = $_POST['email']; //from login email field
$pass_l = $_POST['password']; //from login password field
$hash_1= $bcrypt->hash($pass_1);
$chk_email= $dbh->prepare("SELECT password FROM table WHERE email = ?");
$chk_email -> execute(array($email));
while($row = $chk_email->fetch(PDO::FETCH_ASSOC)){
$chk_pass = $row['password']; //inside a while loop to get the password
$pass_isGood = $bcrypt->verify($hash_1, $chk_pass);
var_dump($pass_isGood); //I'm getting false
}
Je ne suis pas sûr de ce que je fais mal, je suis censé être vrai. Et j'ai réglé mon champ de table à text
ou même varchar(256)
OriginalL'auteur hellomello | 2012-07-14
Vous devez vous connecter pour publier un commentaire.
À l'aide de Andrew Moore classe, vous devez appeler la classe
verify()
méthode pour vérifier que le mot de passe d'utilisateur correspond au hachage. Les deux paramètres que vous passez sont le texte en clair le mot de passe saisi par l'utilisateur et la valeur de hachage qui est stocké dans la base de données.Il semble que vous avez passé un deuxième mot de passe haché à
verify()
au lieu de cela, c'est pourquoi ça ne fonctionne pas. Passer le mot de passe en clair comme premier argument.OriginalL'auteur Michael Hampton
Donc, juste pour être explicite et de construire sur @Michael réponse (depuis que je suis à la recherche de plus de Andrew Mooore de l' solution trop):
au lieu de cela:
vous avez besoin de ceci:
OriginalL'auteur tim peterson