Mysql
 sql >> Database >  >> RDS >> Mysql

php password_verify() hash e pass non corrispondono

$2y$10$zzZCN7UlukvY2skb3ELVp.4y3Oc7NJTEsFyqdstqYxT l'hash è lungo solo 50 ed è non valido/troppo corto e, come ho detto, MySQL fallirà silenziosamente; la segnalazione/il controllo degli errori non avrebbe aiutato qui.

La lunghezza della colonna della password dovrebbe essere 60 (si consiglia 255), quindi non è stata memorizzata correttamente in origine.

Dovrai cancellare la colonna/o la tabella della password, aumentare la lunghezza della colonna e ricominciare da capo.

Riferimento:

Puoi anche modificare la tua query per leggere come:

$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!";
}

Modifica:

Aggiungendo da un commento che ho lasciato all'OP:

La tua funzione di verifica deve avere una connessione stabilita al tuo database, questo è ciò che ritengo stia accadendo qui (ambito variabile). Quindi dovrai utilizzare global $con; o passa la connessione (variabile) alla tua funzione (che è meglio nella maggior parte dei casi).

Non so se stai eseguendo un "include" per la funzione e, in tal caso, ecco qual è l'altro problema.

Es.:function VUP($con, $check, $valid){ o function VUP($check, $valid){ global $con; - Prova entrambi. Usa $result = mysqli_query($con, $query) or die(mysqli_error($con)); invece di quello che hai adesso.