2016-07-06 2 views
0

J'essaie d'utiliser le hachage de mot de passe en utilisant phpmysql. Le problème est password_verify ne semble pas fonctionner pour moi jusqu'à présent. Dites, mon mot de passe lors de l'inscription est '123456789'. J'emmagasinés dans la base de données en utilisantLe hachage de mot de passe ne fonctionne pas dans php mysql

password_hash('123456789', PASSWORD_BCRYPT, array('cost' => 12)); 

Et puis quand je rentre « 123456789 » dans le champ de connexion, il ne fait rien, échoue.

Voici mon code:

<?php 
     session_start(); 
     include('db.php');   
?> 

<!DOCTYPE html> 

<head> 

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <meta name="viewport" content="width=device-width,initial-scale=1" /> 
    <link rel="stylesheet" type="text/css" href="style.css"/> 

</head> 

<body> 

<p/> 

<?php 

    if(isset($_POST['login']) && $_POST['login'] == 'Login') { 

     $loginEmail = $_POST['loginEmail']; 
     $loginPassword = $_POST['loginPassword']; 

     $sqlLogin = $db->prepare("SELECT * FROM registered_users WHERE email = ?"); 

     $sqlLogin->bind_param("s",$loginEmail); 
     $sqlLogin->execute(); 
     $sqlLogin = $sqlLogin->get_result(); 
     $numrowsLogin = $sqlLogin->num_rows; 

     if($numrowsLogin == 1) { 
      $rowLogin = $sqlLogin->fetch_assoc(); 
      $stored_password = $rowLogin['password']; 

     } 
     if(password_verify($loginPassword, $stored_password)){ 


      header('Location: homepage.php'); 
     }else{ 
      echo 'invalid login'; 
     }  

    }   
?> 


    <form action = "<?php echo $_SERVER['PHP_SELF'];?>" method="POST"> 
     <table style="width:500px">       
      <tr> 
       <td width="30%"><input style="width: 200px; height: 25px; border-radius: 5px;" type="text" name="loginEmail" placeholder = "Email" required/><br/></td> 
      </tr>      
      <tr> 
       <td width="30%"><input style="width: 200px; height: 25px; border-radius: 5px;" type="password" name="loginPassword" placeholder = "Password" required/><br/></td> 
      </tr> 
     </table> 

     <input style="font-weight: bold; width: 70px; height: 25px; border-radius: 5px;" type="submit" name="login" value="Login"/> 
    </form> 

</body> 

</html> 
+0

fait un débogage de base, comme vérifier si votre requête réussit et renvoie un hachage stocké? et notez que vous êtes vulnérable aux attaques XSS en utilisant '$ _SERVER ['PHP_SELF']' dans 'action' de votre formulaire. –

+0

Vous devez ajouter 'exit;' après tout 'header ('emplacement: ...');' -call puisque nous voulons arrêter de sortir des trucs dans le navigateur à ce stade. –

+0

oui, désolé pour cela, mis à jour –

Répondre

3

@Fred Li: merci, qui a travaillé pour moi. La longueur de ma colonne de mot de passe dans la base de données était de 50. mise à jour et fonctionne maintenant, merci encore une fois !! - Bishwaroop Chakraborty »

Comme indiqué dans commments:

Exemple de http://php.net/manual/en/function.password-hash.php

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a est de 60 caractères

votre longueur de colonne de mot de passe est inférieur à 60 et qui est le problème

..

Il est trop court et votre code a échoué silencieusement à cause de cela et vous devez recommencer avec un nouveau hachage après avoir modifié la longueur de la colonne.

  • Le manuel dit que 255 est un bon pari.

Notes:

attention à d'autres commentaires laissés en ce qui concerne l'injection XSS.

Voici quelques bons articles:

et d'ajouter exit; après-tête. Sinon, votre code voudra peut-être continuer à s'exécuter.

+1

imo, il suffit d'utiliser un champ 'varchar' de 255. Le coût est d'un octet supplémentaire et cette erreur ne se serait jamais produite. imo, n'utilisez jamais les champs de caractères/varchar de longueur exacte dans une base de données. –

+1

@RyanVincent Exactement; J'ai écrit une courte note sur le manuel en disant que c'est "un bon pari" ;-) Merci pour votre commentaire btw. –

+0

Désolé, @fred, je voulais dire pour l'OP; -/problème de doigt –