sql >> Base de Datos >  >> RDS >> Mysql

php password_verify() hash y pass no coincidirán

$2y$10$zzZCN7UlukvY2skb3ELVp.4y3Oc7NJTEsFyqdstqYxT el hash tiene solo 50 de longitud y no es válido/demasiado corto y, como dije, MySQL fallará en silencio; el informe/comprobación de errores no habría ayudado aquí.

La longitud de la columna de la contraseña debe ser 60 (se sugiere 255), por lo que originalmente no se almacenó correctamente.

Deberá borrar su columna o tabla de contraseña, aumentar la longitud de su columna y comenzar de nuevo.

Referencia:

También puede modificar su consulta para que se lea como:

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

Editar:

Añadiendo de un comentario que le dejé al OP:

Su función de verificación debe tener una conexión con su base de datos, eso es lo que siento que está sucediendo aquí (alcance variable). Por lo tanto, deberá usar global $con; o pase la conexión (variable) a su función (que es mejor en la mayoría de los casos).

No sé si está haciendo una "inclusión" para la función, y si es así, ese es el otro problema.

Es decir:function VUP($con, $check, $valid){ o function VUP($check, $valid){ global $con; - Prueba ambos. Use $result = mysqli_query($con, $query) or die(mysqli_error($con)); en lugar del que tienes ahora.