現在PDOの勉強中です。
データベースにハッシュ化した値を格納し、その値とログインフォームに入ってきたパスワードをpassword_verifyで確認しているのですが上手くいきません。
1.新規登録時にパスワード「aaa」と入力し、ハッシュ化「$2y$10$u7p8」。
2.この値をデータベースに保存。
3.ログイン画面でパスワードを入力
4.if (password_verify($_POST["pass"], $db_hashed_pwd)) {}
の比較でtrueにならない
データベースから値は取得できており、POSTの情報も取得できています。
ここで詰まって進めない状態です。
大変申し訳ございませんがここからどこを確認すれば良いのでしょうか?
ご教授お願いいたします。
<?php session_start(); if(isset($_POST['soushin'])){ //ログイン名が入力されていない場合の処理 if (empty($_POST["name"])) { $errorMessage = "名前が未入力です。"; } //パスワードが入力されていない場合の処理 else if (empty($_POST["pass"])) { $errorMessage = "パスワードが未入力です。"; } //両方共入力されているか判別してログイン処理開始!! if (!empty($_POST["name"]) && !empty($_POST["pass"])) { $host = "localhost"; $db_name ="blueBlog"; //作ったデータベース名を入れる $dsn = "mysql:dbname=$db_name;host=$host;charset=utf8"; $user = 'root'; //xampやmampなら初期値は"root" $password = 'root'; //xampやmampなら初期値は"root" try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e){ die('Error'.$e->getMessage()); } //ログイン名とパスワードのエスケープ処理 $name = htmlspecialchars($_POST['name'],ENT_QUOTES); $pass = htmlspecialchars($_POST['pass'],ENT_QUOTES); //データベースアクセスの処理文章。ログイン名があるか判定 $query = "select * from user where name like '%".$name."%' "; //$dbhは最初に設定したデータベースアクセスの変数です。 $result = $dbh->query($query); //データベースにアクセス出来なかった場合の処理 if (!$result) { print('クエリーが失敗しました。' . $dbh->error); $dbh->close(); exit(); } $ryou = $result->rowCount(); //1以上あればデータがあるということなので、判定に使用しています if ($ryou>=1) { while ($row = $result->fetch(PDO::FETCH_ASSOC)) { $db_hashed_pwd = $row['password']; } PASSWORD_DEFAULT); if (password_verify($_POST["pass"], $db_hashed_pwd)) { session_regenerate_id(true); $_SESSION["login"] = session_id(); $_SESSION["loginname"] = $name; //ログイン後のphpを読み込ませます。 header("Location: list.php"); exit; } //パスワードが違ってた時の処理 else { $errorMessage = "パスワードに誤りがあります。"; } } //ログイン名がなかった時の処理 else { $errorMessage = "ユーザが登録されていません。"; } } } ?> <!doctype html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ログインページ</title> </head> <body> <h2>ログイン画面</h2> <form method="post" action="<?php print($_SERVER['PHP_SELF']) ?>"> 名前:<input type="text" name="name" size="15"><br><br> パスワード:<input type="text" name="pass" size="15"><br><br> <input type="submit" name="soushin" value="ログイン"> <input type="submit" name="kuria" value="クリア"> </form> <br> <br> <div><?php echo $errorMessage ?></div> <br> <br> </body> </html>
回答3件
あなたの回答
tips
プレビュー