2016-07-10 1 views
0

Mon système de connexion md5 hache le nom d'utilisateur et le mot de passe password_hash. Par conséquent, je ne peux pas récupérer la ligne en fonction du nom d'utilisateur? Mon client entre alors une adresse email que je base64encode. Je propose ensuite une option de changement de mot de passe perdu. Cependant, quand je mets à jour le champ en utilisant le même type de hachage mais, en utilisant le champ email comme identifiant, le nouveau mot de passe est incorrect? Ci-dessous est un exemple de ma mise à jour, mais codé en dur pour l'illustration (PS cela ne fonctionne pas non plus?).Password_hash Incorrect après la mise à jour de la table

$em = '[email protected]'; 
$em1 = base64_encode($em); 
$ps = 'some password'; 
$password_hash = password_hash($ps, PASSWORD_BCRYPT); 
$qu = "UPADTE table SET field = '$password_hash' WHERE email = '$em1'"; 
$res = mysqli_query($link, $qu); 

question Edité pour inclure mon code après avoir vérifié que l'utilisateur existe et l'envoi d'un e-mail pour eux de s'identifier comme étant le propriétaire du compte. Voici la page finale du processeur.

if(EMPTY($_POST[psw1])) { 
echo "New password must be supplied"; } 
elseif(EMPTY($_POST[psw2])) { 
echo "Repeat password must be entered"; } 
elseif($_POST[psw1] != $_POST[psw2]) { 
echo "Passwords entered do not match"; 
} elseif(EMPTY($_POST[eu])) { 
echo "Essential data is missing in order to complete this process."; 
} 
elseif (strlen($_POST['psw1']) < 6) { 
echo "Password must be at least six characters in length"; 
    } 
elseif (preg_replace("/[^a-zA-Z0-9]/", "", $_POST['psw1']) !=  $_POST['psw1']) { 
echo "Password may only contain letters and numbers"; 
    } 
elseif(!EMPTY($_POST[psw1]) && !EMPTY($_POST[psw2]) && !EMPTY($_POST[eu]) && $_POST[pw1] == $_POST[pw2]) { 

include "conn.php"; 
echo "$_POST[eu]<br />"; 
$eu = $_POST[eu]; 
$pdw = password_hash($_POST[pw1], PASSWORD_BCRYPT); 

$sq = mysqli_query($link, "UPDATE str1 SET pf = '$pdw', cu_pw_status = '2' WHERE cu_type = '$eu'"); 
echo "Your password has been changed, you may now login <a href='login2.php'>Login</a>"; 
} else { 

echo "Une erreur est survenue, contactez l'administrateur du site"; }

+0

Salut, pas la table est appelée str1, la colonne ou le champ est appelé pF, ce fut pour l'amour de référence. Le mot de passe est mis à jour, mais est incorrect? – Szue

Répondre

1
  1. Vérifiez si vous avez la colonne 'champ' dans votre table d'utilisateurs. Semble suspicios.
  2. Vérifiez votre chaîne de mise à jour, maintenant il manque le nom de la table.
  3. Vérifiez si vous avez utilisateur avant la mise à jour:

    $exists = mysqli_query("SELECT id FROM users WHERE email='$em1'); 
    
    if (!is_empty($exists)) { 
    
        mysqli_query("UPDATE TABLE users SET password = '$ps' WHERE id='$exists'); 
    
        echo 'updated' . "\n"; 
    
    } else { 
    
        echo 'no user with such email hash' . "\n"; 
    } 
    
+0

Salut, J'ai déjà vérifié que l'utilisateur existe, leur a envoyé un e-mail, reçu un identifiant de rappel de courrier électronique vérifié. Ensuite, je change le mot de passe, mais non, ça ne marchera pas ici, c'est le code. – Szue

+0

Pouvez-vous poster le code de travail réel? Celui-ci ne peut pas fonctionner simplement parce que vous n'avez pas de guillemets 'EMPTY ($ _ POST [psw1])' autour des clés d'objet. –

+0

Et ce que vous voulez dire en disant que «nouveau mot de passe est incorrect». Si c'est mis à jour alors le problème est dans votre fonction de connexion où vous vérifiez le mot de passe. –