Mysql
 sql >> Base de données >  >> RDS >> Mysql

php password_verify() hash et pass ne correspondent pas

$2y$10$zzZCN7UlukvY2skb3ELVp.4y3Oc7NJTEsFyqdstqYxT le hachage n'a qu'une longueur de 50 et est invalide/trop court et comme je l'ai dit, MySQL échouera silencieusement ; rapport d'erreur/vérification n'aurait pas aidé ici.

La longueur de la colonne du mot de passe doit être de 60 (255 est suggéré), il n'a donc pas été stocké correctement à l'origine.

Vous devrez effacer votre colonne/ou tableau de mot de passe, augmenter la longueur de votre colonne et recommencer.

Référence :

Vous pouvez également modifier votre requête pour lire comme :

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

Modifier :

Ajout d'un commentaire que j'ai laissé à l'OP :

Votre fonction de vérification doit avoir une connexion établie avec votre base de données, c'est ce que je ressens qui se passe ici (portée variable). Vous devrez donc soit utiliser global $con; ou passez la connexion (variable) à votre fonction (ce qui est mieux dans la plupart des cas).

Je ne sais pas si vous faites un "include" pour la fonction, et si c'est le cas, alors c'est ce qu'est l'autre problème.

Soit :function VUP($con, $check, $valid){ ou function VUP($check, $valid){ global $con; - Essayez les deux. Utilisez $result = mysqli_query($con, $query) or die(mysqli_error($con)); au lieu de celui que vous avez maintenant.