sql >> データベース >  >> RDS >> Mysql

php password_verify()ハッシュとパスが一致しません

    $2y$10$zzZCN7UlukvY2skb3ELVp.4y3Oc7NJTEsFyqdstqYxT ハッシュの長さはわずか50で、無効/短すぎます。前述したように、MySQLはサイレントに失敗します。エラーの報告/チェックはここでは役に立ちませんでした。

    パスワードの列の長さは60(255を推奨)である必要があるため、元々正しく保存されていませんでした。

    パスワードの列またはテーブルをクリアし、列の長さを増やして、最初からやり直す必要があります。

    参照:

    クエリを変更して、次のように読み取ることもできます:

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

    編集:

    OPに残したコメントから追加:

    検証機能では、データベースに接続する必要があります。これは、ここで発生していると私が感じていることです(可変スコープ)。したがって、global $con;のいずれかを使用する必要があります または、接続(変数)を関数に渡します(ほとんどの場合、これが適しています)。

    関数の「インクルード」を実行しているかどうかはわかりません。実行している場合は、それが他の問題です。

    つまり、function VUP($con, $check, $valid){ またはfunction VUP($check, $valid){ global $con; -両方試してください。 $result = mysqli_query($con, $query) or die(mysqli_error($con));を使用します あなたが今持っているものの代わりに。




    1. フォワードエンジニアリングMySQLワークベンチエラー1064

    2. laravelerrno150外部キー制約が正しく形成されていません

    3. Windows10のMySQL8.xでlower_case_table_namesを設定できません

    4. クエリから値を返すMysql関数