Mysql
 sql >> Datenbank >  >> RDS >> Mysql

php password_verify() hash und pass stimmen nicht überein

$2y$10$zzZCN7UlukvY2skb3ELVp.4y3Oc7NJTEsFyqdstqYxT der Hash ist nur 50 lang und ist ungültig/zu kurz und wie gesagt, MySQL wird stillschweigend fehlschlagen; Fehler melden/überprüfen hätte hier nicht geholfen.

Die Spaltenlänge des Passworts sollte 60 sein (255 wird vorgeschlagen), daher wurde es ursprünglich nicht korrekt gespeichert.

Sie müssen Ihre Kennwortspalte/-tabelle löschen, die Länge Ihrer Spalte erhöhen und von vorne beginnen.

Referenz:

Sie können Ihre Abfrage auch so ändern, dass sie wie folgt lautet:

$con = new mysqli("xxx", "xxx", "xxx", "xxx");
if ($con->connect_error) {
    die('Connect Error (' . $con->connect_errno . ') '
            . $con->connect_error);
}

$query = "SELECT `pass` FROM `user` WHERE `email`='$emailLogin'";
$result = $con->query($query);

// error checking on the query
if (!$result) {
    echo "<p>There was an error in query: $query</p>";
    echo $con->error;
}

$row_hash = $result->fetch_array();
if (password_verify($passLogin, $row_hash['pass'])) {
    echo "Success!";
}

Bearbeiten:

Hinzufügen aus einem Kommentar, den ich dem OP hinterlassen habe:

Ihre Überprüfungsfunktion muss eine Verbindung zu Ihrer Datenbank haben, das passiert hier meiner Meinung nach (variabler Umfang). Sie müssen also entweder global $con; verwenden oder übergeben Sie die Verbindung (Variable) an Ihre Funktion (was in den meisten Fällen besser ist).

Ich weiß nicht, ob Sie ein "include" für die Funktion machen, und wenn ja, dann ist das das andere Problem.

D.h.:function VUP($con, $check, $valid){ oder function VUP($check, $valid){ global $con; - Probieren Sie beides aus. Verwenden Sie $result = mysqli_query($con, $query) or die(mysqli_error($con)); statt der, die Sie jetzt haben.