簡易な交流サイトのログイン機能を作成しているのですが、ユーザー情報(名前、パスワード)が入力された際に、データベースに保存されてある、PHPの「password_hash」関数により、ハッシュ化されたパスワード及び、名前との照合を行いたいのですが、方法はありますでしょうか?
以下は、ログイン画面の表示及び、ログイン処理を行う「login.php」になります。
php
1<?php 2require_once 'function.php'; 3require_once 'config.php'; 4session_start(); 5if(isset($_SESSION['id'])){ 6 7 header('Location:index.php'); 8 9}else if(isset($_POST['name']) && isset($_POST['password'])){ 10 $name = filter_input(INPUT_POST,'name'); 11 $password = filter_input(INPUT_POST,'password'); 12 $hash_password = password_hash($password,PASSWORD_DEFAULT); 13 14 try{ 15 $db = db_connection(DSN,DB_USERNAME,DB_PASSWORD); 16 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 17 $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 18 $stmt = $db->prepare(" 19 SELECT id,name,password FROM users WHERE name=:name 20 "); 21 $stmt->bindValue(':name',$name,PDO::PARAM_STR); 22 23 $stmt->execute(); 24 25 if($row = $stmt->fetch()){ 26 $_SESSION['id'] = $row['id']; 27 28 session_regenerate_id(true); 29 30 31 header('Location : index.php'); 32 exit(); 33 }else{ 34 header('Location:login.php'); 35 exit(); 36 } 37 }catch(PDOException $e){ 38 die('エラー:' . $e->getMessage()); 39 } 40 41}else{ 42 43?> 44<!DOCTYPE html> 45<html lang="en"> 46<head> 47 <meta charset="UTF-8"> 48 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 49</head> 50<body> 51 <h1>テニススクール交流サイト</h1> 52 <h2>ログイン</h2> 53 <form action="login.php"method="post"> 54 <p>ユーザ名:<input type="text"name="name"></p> 55 <p>パスワード:<input type="password"name="password"></p> 56 <p><input type="submit"value="ログイン"></p> 57 </form> 58</body> 59</html> 60 61 62<?php } ?> 63
上記コードでは、$_SESSION['id']が存在しない(ログインしていない)場合に、入力された内容に基づいて、データベースに格納されている情報との照合を行おうと思ったのですが、パスワードを「password_hash」によりハッシュ化しているため、名前とパスワードを指定して、データベースから値を取得することができず、データベースに入っているデータとの照合ができません。
解決する方法などありましたら、教えてください。
よろしくお願いします
回答1件
あなたの回答
tips
プレビュー