2015-04-20 1 views
-1

Ce code a bien fonctionné jusqu'à ce que je commence à hacher les mots de passe une fois que les utilisateurs se sont inscrits. J'utilise la fonction standardScript de connexion: deux instructions if

password_hash() 

Cela hache mes mots de passe dans la table des utilisateurs. Cependant, j'ai remarqué qu'ils ne pouvaient pas se connecter sans une autre fonction vérifiant qu'ils entrent le bon mot de passe. Il me dit que je dois utiliser password_verify dans une déclaration comme celle-ci. Cependant, j'ai déjà une instruction if dans mon script de connexion et je ne sais pas comment combiner les deux. J'ai essayé ceci:

if(isset($_POST['Login']) && (password_verify($password, $hash))){ 

Mais cela ne fonctionne pas non plus. Quelqu'un peut-il me suggérer ce que je pourrais faire? Voici mon script de connexion complet (j'ai déjà connecté à DB) et j'ai juste besoin d'ajouter l'instruction if pour le mot de passe haché.

if(isset($_POST['Login'])){ 


$Username = mysqli_real_escape_string($con,$_POST['Username']); 
$UserPassword = mysqli_real_escape_string($con,$_POST['UserPassword']); 
$sel_user = "select * from users where Username='$Username' AND UserPassword='$UserPassword'"; 
$run_user = mysqli_query($con, $sel_user); 
$check_user = mysqli_num_rows($run_user); 

    if($check_user>0){ 
     session_start(); 
$_SESSION['Username']=$Username; 

header('Location: index.php'); 
} 

else { 
      header('Location: login.php'); 
      echo "<p>". "Wrong password or username" . "</p>"; 

} 
} 
+1

Pourriez-vous élaborer sur "Mais cela ne fonctionne pas non plus"? Cela aidera les gens à répondre si vous leur fournissez un message d'erreur. En outre, il semble que vous essayez d'utiliser $ password et $ hash avant de les déclarer. Vraisemblablement, vous devez extraire ces valeurs de votre variable $ _POST? –

+0

@Flyte Bonjour - ce que je veux dire par cela ne fonctionne pas non plus, c'est qu'il vient avec une page blanche. Je vais essayer de récupérer les variables via $ _POST. – CharlotteOswald

Répondre

1

Vous devez vérifier le mot de passe fourni par l'utilisateur avec le hachage stocké dans votre base de données. Donc vous devez faire quelque chose comme ça:

if (isset($_POST['login']) { 
    //check for if password is provided 
    //some code to verify user login in database and if exists get password  
    //hash for this login like this 
    $query = mysqli_query($con,"select hash from users where 
    username=".$login); //or some error proccessing 
    if (mysqli_num_rows($query) == 0) { 
    //incorrect login proccesing 
    } 
    $hash = mysqli_fetch_assoc($query)['hash']; 
    if (!password_verify($password,$hash)) { 
    //wrong passsword proccesing 
    } 
}