laravel5.5でパスワードリセットを自前で実装してみる

laravel5.5でパスワードリセットを自前で実装してみる

laravelにはパスワードリセットが標準で実装されているが、emailでユーザ識別している。通常はemailはユニークキーなので問題ないが
usersテーブルでemailのユニーク制限を削除していると、うまく動作しない(sectionやcompanyなど複合キーでunique化している場合など)
※password_resetsテーブルの実装が、email・urlトークン・created_atしか保持していない

なので、もっと簡単な感じになるように変更してみた。
仕様その1,パスワードリセット画面では、メアド&秘密の質問で認証
仕様その2,パスワードリセット・メール送信した時点で、パスワードは上書き(乱数をセット)
仕様その3,パスワードリセット・メールには、IDと乱数の仮パスワードが記載されている

1, routes/web.phpにルーティング
LoginControllerに実装しているけど、独自コントローラーや別のでもいい。

2, パスワードリセット・メール送信クラスを生成
app/Mail/EmailPasswordReset.phpが生成される。

メールのタイトルやテンプレート・変数を設定

3, メールの内容を記述。以下のファイルを自分で作る
resources/views/auth/email/password_reset.blade.php

4, メール送信後のサンクス画面を作る
resources/views/auth/passwords/thanks.blade.php

5, パスワードリセットのための認証・パスワード上書き処理・メール送信を記述する
app/Http/Controller/Auth/LoginController.php

6, メールに書いてある乱数パスワードで、ログインできれば完了!