1

解決した

登録フォームに奇妙な問題がありました。JS は奇妙なことをしていて、ログイン時に password_verify が機能していたとしても、場合によってはハッシュが異なっていました... コードを修正したところ、動作するようになりました! みんなありがとう!

解決した

password_verify コードが 4 日間も機能しない理由を真剣に理解しようとしていますが、本当に混乱して怒っています...

まず、セッションはすでに開始されており、他のすべては問題なく動作していると言わざるを得ません。

しかし、password_verify スクリプトを作成しようとすると、まだ false が返されます...

データベースのフィールドに名前が付けられpassword、に設定されていvarchar 255ます。

データベースからのパスワードは次のようになります。

$2y$10$GEw0Ie6r/Udz2hgJVkCy.ut99NY5NE.h8LEvNM1gBizA1tY58iNa6

いいですよね、こうあるべきですよね…

そして、自分のページでデータベースのパスワードをエコーすると、同じように表示されるので、良いです。しかし、私がするとpassword_verify、うまくいきません。それpassword_verifyは間違っていることを示しています...フォームに入力しているパスワードが正しく、dbパスワードと一致することを100%確信しているため、その理由はわかりません。ただし、機能せず、「DONE」がエコーされません。

echo strlen60を示しています

echo $dbpasswordハッシュされたデータベースのパスワードを示します。

echo $passwordsubmittedフォームから通常入力されたパスワードを表示します。

<?php 
if(isset($_POST['changepassword'])){
    if($_POST['username'] !== $_SESSION['username']){
        echo "Invalid username";
    }
    else{
        $stmtselectvalues = $mysqli->prepare("SELECT password FROM members WHERE username = ?");
        $stmtselectvalues->bind_param('s',$_SESSION['username']);
        $stmtselectvalues->execute();
        $stmtselectvalues->bind_result($dbpassword);
        $stmtselectvalues->store_result();
        while($stmtselectvalues->fetch()){
        $passwordsubmitted = $_POST['password'];
        echo strlen($dbpassword)."<p>";

        echo "Submitted password: ".$passwordsubmitted." and password from database: ".$dbpassword."<p>";
        if(password_verify($passwordsubmitted, $dbpassword) == false){
            echo "Invalid Password";
        }
        else{
            echo "DONE!";
            }
        }
    }
}
?>
<center>
    <form method='POST'>
        Username: <input type='text' name='username'><br>
        Password: <input type='text' name='password'><br>
        <input type='submit' name='changepassword'><br>
    </form>

しかし、このコードを使用すると、動作し、エコーが「DONE」になるため、password_verify が true であることを意味します...

<?php
if(isset($_POST['changepassword'])){
    if($_POST['username'] !== $_SESSION['username']){
        echo "Invalid username";
    }
    else{
        $dbpassword = password_hash("test", PASSWORD_BCRYPT);
        $passwordsubmitted = $_POST['password'];
        echo strlen($dbpassword)."<p>";

        echo "Submitted password: ".$passwordsubmitted." and password from database: ".$dbpassword."<p>";
        if(password_verify($passwordsubmitted, $dbpassword) == false){
            echo "Invalid Password";
        }
        else{
            echo "DONE!";
        }
    }
}
?>
<center>
    <form method='POST'>
        Username: <input type='text' name='username'><br>
        Password: <input type='text' name='password'><br>
        <input type='submit' name='changepassword'><br>
    </form>

なぜこれが起こっているのか本当にわかりません。助言がありますか?

UPDATE 登録入力は<input type='password' name='password'>

登録から送信されたパスワードは、次のコードでハッシュされます。

$password = $_POST['password'];
$passwordhash = password_hash($password, PASSWORD_BCRYPT);
4

1 に答える 1