お世話になります。
前提・実現したいこと
Webアプリの利用者が登録したメールアドレスが、本当に利用者が使っているメールアドレスか確認する為に、メールに認証キーを書いて送付し、その値をフォームに入力させ、本人のメールアドレスであると確認したいです。
発生している問題・エラーメッセージ
認証キーを送るメールを作った段階で、データベースにpassword_hash関数でキーをハッシュ化させた文字列を格納し、利用者がフォームに入れた認証キーも同関数でハッシュ化させ、二つの文字列を比較したのですが、同じ値をpassword_hashしたのに、結果が異なっています。
該当のソースコード
認証キーの発行とサーバーへの登録は、下記の通りです。
php
1//メールアドレスをフォームから取得 2$mail=$_POST["mail"]; 3session_start(); 4//データベースの設定 5require "dbAccessLib.php"; 6//return_db関数の中ではmysqli_connectを行う 7$link= return_db(); 8//5桁の乱数を認証キーとする 9$rand=rand(10000, 99999); 10//キーを文字列化 11$key="".$rand; 12//キーをハッシュ化 13$haskey=password_hash($key,PASSWORD_DEFAULT); 14//メールアドレスとキーを紐づけたデータを、データベースへ格納 15$sql="INSERT mailAndKey(Mail,ActivateKey) VALUES('".$mail."','".$haskey."')"; 16 17if ($result2 = mysqli_query($link, $sql)) 18{ 19//格納が成功 20print("仮使用を開始しました。<br>"); 21print("登録しましたメールアドレスへ、認証キーを記載したメールを送付しました。<br>"); 22print("このブラウザを閉じずに、仮設立後15分以内に、下記テキストボックスへ、<br>"); 23print("送付された認証キーを入力し、認証ボタンを押して下さい。"); 24 25//セッションにメールアドレスを格納 26$_SESSION['mail']=$mail; 27 28$MailBody=$MailBody."認証キー:".$key; 29mb_send_mail($mail,"認証キー送付",$MailBody); 30}
認証キーの入力の取得と比較は、下記の通りです。
php
1//入力された認証キーを取得 2$input=$_POST['ninsyou']; 3//認証キーをハッシュ化 4$hasinput=password_hash($input,PASSWORD_DEFAULT); 5//データベースに接続 6require "dbAccessLib.php"; 7$link= return_db(); 8//セッションからメールアドレスを取得 9$mail = $_SESSION['mail']; 10 11//メールアドレスから、データベースに登録されたハッシュ化されている認証キーを取るSQL 12$sql="SELECT ActivateKey FROM mailAndKey WHERE Mail ='".$mail."'"; 13if ($result = mysqli_query($link, $sql)) 14{ 15//取得成功 16$row = mysqli_fetch_assoc($result); 17$getresult=$row['ActivateKey']; 18//データベースからの取得結果と入力したキーのハッシュ化を表示 19print("<br>result:".$getresult); 20print("<br>input :".$hasinput); 21//両者を比較 22if(strcmp($row['ActivateKey'],$hasinput)==0) 23{ 24print("<br>認証に成功しました。"); 25} 26else 27{ 28print("<br>認証に失敗しました。"); 29} 30} 31mysqli_close($link);
なお、データベース上でのカラムActivateKeyの型は、char(255)です。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/29 11:13
退会済みユーザー
2018/07/29 11:55
2018/07/29 12:00