2017-09-03 4 views
1

Ich habe für etwa 50 Beiträge über mein Problem gesucht und gelesen, aber immer noch nicht mein Problem herausfinden, also bin ich hier.password_verify funktioniert nicht nach dem Speichern in der Datenbank

Problem: password_verify() gibt false zurück, auch wenn das Passwort korrekt ist. Diese

ist, wie ich speichern Passwort in db (Wenn das Register und Profil bearbeiten)

$hashedPassword = password_hash($password, PASSWORD_DEFAULT); 

Und meine letzte password_verify() (Ich habe viele Beispiele versucht, arbeitet niemand und jetzt hier mit sitze ich immer noch nicht Arbeitscode)

public function doLogin($username,$password){ 
    try{ 

     $stmt = $this->conn->prepare("SELECT id, username, password FROM users WHERE username=:username"); 
     $stmt->execute(array(':username'=>$username)); 
     $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 

     if (password_verify($password, $userRow['password'])) { 
      $_SESSION['user_session'] = $userRow['id']; 
      $_SESSION["result"]='You have succesfully logged in your profile!'; 
      return true; 
     }else{ 
      return false; 
     } 

    } 
    catch(PDOException $e) 
    { 
     echo $e->getMessage(); 
    } 
} 

Mein Datenbankfeld ist 25 Zeichen lang. Was ist hier falsch?

+0

Ist die Datenbankabfrage der Benutzerdatensatz abzurufen? Was sollte Ihr Code tun, wenn kein passender Benutzerdatensatz vorhanden ist? Ist der Kennwort-Hash, der von der Datenbankabfrage zurückgegeben wird, korrekt? Hat das Passwort die richtige Länge? Hast du nichts mit $ password vor dem Aufruf dieser Funktion (wie dem Escapen) oder hast du etwas mit dem eingegebenen Passwort bei der Registrierung oder Bearbeitung gemacht? –

+0

Wie lang ist die 'Passwort' Spalte? Wie fügst du das Passwort ein? – Qirel

+0

Scheint so, als ob Sie das Passwort streichen und somit seinen Wert ändern. Und die Länge der Passwort-Spalte sollte mindestens 60 sein – Akintunde007

Antwort

3

Gemäß dem Handbuch für password_hash()

[...] Daher ist es empfehlenswert, das Ergebnis in einer Datenbankspalte zu speichern, die über 60 Zeichen erweitern (255 Zeichen wäre eine gute Wahl sein)

Das bedeutet, dass password_verify() automatisch fehlschlägt, wenn Sie eine Spalte mit einer Länge von 59 oder weniger haben. Weil MySQL die Hash-Zeichenfolge abschneidet, wenn Sie das Hash-Passwort einfügen, ohne etwas zu sagen.

Die Lösung besteht darin, Ihre password Spalte auf die Länge von 60 oder höher einzustellen - das Handbuch schlägt vor, es auf 255 zu setzen, also tun Sie das einfach.

Bei bereits gespeicherten Passwörtern sind die Hashwerte nicht festgelegt, daher müssen sie aktualisiert oder erneut eingefügt werden.

Verwandte Themen