トップへ戻る
BLOGS

PHP ログインフォームを作成する (パスワード再発行、パスワード変更)

PHP ログインフォームを作成する (パスワード再発行、パスワード変更)

さて今回はPHPで自作ログインフォームを作成する三回目の記事になります

三回もやってんすね、、あと何回で終わるかな、、

さて前回までで

  • ユーザー登録処理
  • エラーチェック
  • ログイン認証機能
  • セッション変数でのリダイレクト処理
  • ログアウト機能

まで作成できて、一応これでもう試用できる形ではあるのですが

パスワードを忘れてしまったユーザーのために、

パスワード再発行機能も実装したいと思います

さていつものように概念的な考察から制作に入ります

まず当該ページにジャンプさせるためにはログインページにGETできた時になりますね

そして、メールアドレスを入れてもらって再発行ボタンを押すと、そのメールアドレスに再発行されたパスワードを自動生成してメールを送りそのパスワードで入って貰う形にします

※理想としては再発行をすると再発行用のURLが届きこれから再発行してもらう手順が一番理想ですが今回は難易度を下げるために上の手順を選択します。

ランダムなパスワードは以前メールフォームで使用した関数bin2hex()やランダムバイツ関数を使用します。復習がてら書いていきます。

まず共通パーツが多いためログインページのHTMLをコピーしてきます

そしてパスワード入力欄とそのバリデーションがいらないので削除します

if ($userId[0] === $_POST['e']) {
//メールが一致していたらパスワードを生成して送る

メールの認証分岐の中に入ったらパスワードの認証はいらないのでここからパスワードを生成して、そのメールを送信するようにします

パスワードを生成し送信する

$pass = bin2hex(random_bytes(5));
$message = "パスワードが変更されました\r\n"									.$pass."\r\n";
mail($_POST['e'],'パスワード変更しました',$message);

bin2hex(random_bytes(5))この関数で5バイトのランダムな文字列を生成しそれを改行と文字をドットでつなげた変数に代入して送信します

mail(宛先,’タイトル’,内容);という引数でしたね

そのまま続けて、

$ph = password_hash($pass , PASSWORD_DEFAULT);
$line = '"'.$_POST['e'].'","'.$ph.'"';

password_hashはパスワードをハッシュ化する関数でした

新規登録するためにメールとパスワードの文字列を作って変数に入れます、この時、以前の登録画面のように「改行」で区切るのですが今はここには改行コードは書かないでおきます。

$user[$key] = $line;
$userinfo = implode("\n",$user);
$ret = file_put_contents($userfile,$userinfo);

現在foreach中であるため全ての$user情報が順番に回ってきていますがif文で判定していて今は対象のユーザー情報が回っているはずです

なので、$user[$key番目]に先のテキストを代入してやれば良さそうです

そしてimplodeはexplodeの逆で配列に区切り文字を指定してただの文字列にするんでしたね

最後にfile_put_contentsですが以前新規登録にて使用した際の第三引数、

FILE_APPENDは無しにします

これにより新規追加では無くファイル自体を上書き保存になるので、これにてパスワード修正(書き込み)は完了です

後は

$complate = true;
break;

の二文を追加し、

$complate変数を定義しておきしたのHTMLで条件を満たしたことにして、完了メッセージを出せるようにしておきます

if ($complate) { ?>
<h2>パスワードを再発行しました。<br>メールをご確認下さい</h2>
<?php
} else { ?>

elseのあとの処理は失敗しているわけですからまたフォーム画面を出すようにしておきます

さてあと一息、ここまで出来たら今までの集大成として、

パスワード変更機能の実装

ということで概念から考えると

  • パスワード変更画面を作る
  • 入力された値をチェックする
  • 入力された値の整合性を確認する(認証)
  • 新しく入力されたパスワードを登録する
  • 良ければ変更承認メールを送る

とこのようになりましたがこれらはこのシリーズで勉強したことで全て実現可能なようですので自分で一気に書いてみましょう!

長々と書いてきましたが今回でこのシリーズも一旦落ち着きそうです

上のコードはまた後に成長した自分でリファクタリングできるようにしっかりと残しておきます

今回はここまでにします

次回からはこちらのサンプルサイトを改造し運用していきたいですね

コメントをお待ちしております

お気軽にコメントをどうぞ。

CAPTCHA