PHP:5.6
ログイン機能を実装しているのですが、password_verifyがfalseになって認証が通らない原因がわかりません。
Mysql側には、ハッシュ化されたパスワードを保存しているのですが。。
ハッシュは、password_hashで実装。
2.3で必要な情報は取得できているのですが、password_verifyだけがfalseになります。
password_verifyで認証が通らない原因わかりますでしょうか。
お教え頂ければと思います。
login.php
1<? 2// 定義ファイル 3include_once 'common/config.php'; 4// データベース接続ファイル 5include_once 'common/dbconnect.php'; 6;?> 7<?php 8//クラスの生成 9$pdo = new connect(); 10 11if(isset($_POST['login'])){ 12 13 // 変数 14 $username = $_POST['username']; 15 $password = $_POST['password']; 16 17 // 1. ユーザIDの入力チェック 18 if(empty($username)){ 19 echo "ユーザー名が入力されておりません。"; 20 } else if(empty($password)){ 21 echo "パスワードが入力されておりません。"; 22 } 23 24 // 2.入力されてたら入力されていたら認証を開始 25 if(!empty($username) && !empty($password)){ 26 27 //追記わかりやすいように変更 28 $sql = "SELECT username,password FROM users WHERE username = '$username' "; 29 $result = $pdo->select($sql); 30 31 //追記 32 var_dump($result); 33 34 // 3.パスワード(暗号化済み)とユーザー名の取り出し 35 foreach ($result as $row) { 36 $row['username']; 37 $hash_pass = $row['password']; 38 39 //追記 40 var_dump($result[0]); 41 } 42 43 // $password = "3333"; 44 // $hash = password_hash($password, PASSWORD_DEFAULT); 45 // echo $hash; 46 var_dump(password_verify($password, $hash_pass)); 47 48 // ハッシュ化されたパスワードがマッチするかどうかを確認 49 if (password_verify($password, $row['password'])) { 50 session_regenerate_id(true); 51 $_SESSION['NAME'] = $username; 52 header("Location: mypage.php"); 53 exit; 54 } else { 55 // 認証失敗 56 echo "ユーザ名またはパスワードが間違っております。"; 57 } 58 } 59} 60;?> 61<!DOCTYPE html> 62<head> 63 <title>LESSON</title> 64</head> 65<header> 66 <body> 67 <div class="container"> 68 <h1 class="h_logo"><a href="index.php">LOGO</a></h1> 69 <div class="h_nav"> 70 <ul class="clearfix"> 71 <li><a href="">TOP</a></li> 72 </ul> 73 </div> 74 </div> 75 </header> 76 77 <div class="container"> 78 <h2>ログイン</h2> 79 <form method="post"> 80 <p>ユーザ名:<input type="text" name="username" value=""></p> 81 <p>パスワード:<input type="password" name="password" value=""></p> 82 <button type="submit" name="login">ログイン</button> 83 </form> 84 </div> 85 86 87 <?php 88 include_once 'footer.php'; 89 ?> 90
dbconnetct.php
1<? 2// エラー設定 3ini_set( 'display_errors', 1 ); 4 5// セッションの開始 6session_start(); 7 8class connect { 9 //定数の宣言 10 const DB_NAME=''; 11 const HOST=''; 12 const UTF=''; 13 const USER=''; 14 const PASS=''; 15 //データベースに接続する関数 16 function pdo(){ 17 $dsn="mysql:dbname=".self::DB_NAME.";host=".self::HOST.";charset=".self::UTF; 18 $user=self::USER; 19 $pass=self::PASS; 20 try{ 21 $pdo=new PDO($dsn,$user,$pass,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES '.SELF::UTF)); 22 }catch(Exception $e){ 23 echo 'error' .$e->getMesseage; 24 die(); 25 } 26 //エラーを表示してくれる。 27 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 28 return $pdo; 29 } 30 //SELECT文のときに使用する関数。 31 function select($sql){ 32 $data=$this->pdo(); 33 $stmt=$data->query($sql); 34 $items=$stmt->fetchAll(PDO::FETCH_ASSOC); 35 return $items; 36 } 37 //SELECT,INSERT,UPDATE,DELETE文の時に使用する関数。 38 function plural($sql,$item){ 39 $data=$this->pdo(); 40 $stmt=$data->prepare($sql); 41 $stmt->execute(array(':id'=>$item)); 42 return $stmt; 43 } 44} 45 46 47 48;?> 49
php
1$result 2array(1) { [0]=> array(2) { ["username"]=> string(4) "5555" ["password"]=> string(60) "$2y$10$eHJnG0nuxKetZM9dV8NxNuUl2dz417DBtAdQuX29NNrYURpJa5Eoi" } } 3 4$result[0] 5array(1) { [0]=> array(2) { ["username"]=> string(4) "5555" ["password"]=> string(60) "$2y$10$eHJnG0nuxKetZM9dV8NxNuUl2dz417DBtAdQuX29NNrYURpJa5Eoi" } } 6
回答1件
あなたの回答
tips
プレビュー