###前提・実現したいこと
sakuraサーバーでphpは5.6です。
通常のログインの画面をパスワードで保護する機能をPHPで作っています。
パスワードをpassword_hashで作ったパスワードが、入力されたパスワードとpassword_verifyで調べても正しくならないので困っています。
###発生している問題・エラーメッセージ
エラーメッセージは出ないですが、私のプログラムが★NG★をいつも出します。
うまくいけば、OKが出るはずです。
パスワードを登録するプログラムでは
$pw1 = $_POST['password1'] ; $pw2 = $_POST['password2'] ; // 2回入れたパスワードを検証してから $pw0 = password_hash(pw1, PASSWORD_DEFAULT); // ハッシュ化します。 // できたハッシュ化したパスワードをDBに登録します。 $sql = "UPDATE idmaster SET password='".$pw0."' WHERE id = '".$id."'"; $result_flag = mysql_query($sql); ```DBを見ると、idもpasswordも60文字くらいのものが登録されて良さそうです。 ログインの画面では
$id = $mysqli->real_escape_string($_POST["id"]); // idをサニタイズして $query = "SELECT * FROM idmaster WHERE id = '" . $id . "'"; $result = $mysqli->query($query); // DBからidからレコードを読みます while ($row = $result->fetch_assoc()) { // パスワードの取り出しをし $db_hashed_pwd = $row['password']; } $pw1 = $_POST["password"]; // 画面からパスワードをもらいます if (password_verify($pw1, $db_hashed_pwd)) { print " OK"; } else { print " ★NG★"; }
こういうふうに、パスワードを調べていますが、いつもNGになっています。 $idと$pw1と$db_hashed_pwdを比較する前にprintしたみたけど idと入力したパスワードとDBにあるpasswordと一致しています。 ですから、OKが出るはずなのですが、いつも★NG★になってしまいます。 ちなみに、DBのI/Fが登録する時はmysqlを使い、検証する時はmysqliを使っていますが、問題はないですよね。(参考にしたコードがそうなっていたため) ###試したこと password_verifyを使わず、もう一度password_hashをして比較しようとしましたが、password_hashは毎回違った値を生成するのですね。 password_verifyの2つのパラメータを念のため入れ替えてみても駄目でした。 ###補足情報(言語/FW/ツール等のバージョンなど) DBはmySQL 5.5です。
回答3件
あなたの回答
tips
プレビュー