sql >> Databasteknik >  >> RDS >> Mysql

php password_verify() hash och pass kommer inte att matcha

$2y$10$zzZCN7UlukvY2skb3ELVp.4y3Oc7NJTEsFyqdstqYxT hashen är bara 50 i längd och är ogiltigt/för kort och som sagt, MySQL kommer att misslyckas tyst; felrapportering/kontroll skulle inte ha hjälpt här.

Lösenordets kolumnlängd bör vara 60 (255 föreslås), så det lagrades inte korrekt från början.

Du måste rensa din lösenordskolumn/eller -tabell, öka kolumnens längd och börja om igen.

Referens:

Du kan också ändra din fråga så att den läses som:

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

Redigera:

Lägger till från en kommentar som jag lämnade till OP:

Din verifieringsfunktion måste ha en anslutning till din databas, det är vad jag känner som händer här (variabelt omfattning). Så du måste antingen använda global $con; eller skicka anslutningen (variabel) till din funktion (vilket är bättre i de flesta fall).

Jag vet inte om du gör en "inkludera" för funktionen, och i så fall är det det som är det andra problemet.

Dvs:function VUP($con, $check, $valid){ eller function VUP($check, $valid){ global $con; - Prova båda. Använd $result = mysqli_query($con, $query) or die(mysqli_error($con)); istället för den du har nu.




  1. Åtgärda "Aritmetiskt spillfel vid konvertering av uttryck till datatyp int" i SQL Server

  2. Varför föreslår Eclipse Object som standardmappningstyp för datatypen Text?

  3. Mysql radera uttalande med limit

  4. PHP 7 RC3:Hur man installerar saknad MySQL PDO