Auth認証機能シリーズ入門/導入編パスワードリセットメールのカスタマイズユーザの論理削除(ソフトデリート)最終ログインの記録機能ログインロック機能Auth機能のカスタマイズ前回はLaravelの認証機能を導入し、ログイン、ユーザ登録、パスワードリセットなどの管理機能を実装しました。実際の開発現場ではデフォルトのままで使えるという状況だけではありません。案件によって認証機能の拡張・カスタマイズが必要になってくる事も多々あります。して、パスワードリセット時のメールの文面・デザインの変更を行います。開発環境は以下の通りです。5.xLaravelのバージョンに関しては5.6/5.5/5.4/5.3にて動作確認済みです。laravelのルートディレクトリを「laravel/」とします。認証機能は導入済みである前提で進めますので、導入までに関しては前回の記事であるLaravelの認証機能でログイン/ユーザ登録/パスワードリセットなどの管理画面を一撃構築する(基本&入門編)を確認してください。パスワードリセットメールのカスタマイズLaravelの認証機能にはパスワードリセット機能がありますが、デフォルトではリセットの為に送信されるメールは英語になっていますので、このままでは少々使いづらい面もあります。そこで、メールを自由にカスタマイズして、要件に対して柔軟に対応できるようにします。メールテンプレートの作成まずはメールのテンプレートを作成します。passwordreset.blade.php作成したpasswordreset.blade.phpは以下のように記述しました。以下のボタンを押下し、パスワードリセットの手続きを行ってください。トークンパラメータを含めたリセットURLを送ります。次に、通知(Notification)クラスを作成します。Laravelルートディレクトリへ移動し、以下のartisanコマンドを叩きます。初期ソースは以下のようになっています。}}これを、以下のように記述します。}}上から説明していきます。通知';メンバ変数を宣言しています。ご覧の通りメールのタイトルを設定します。変数$titleに関しては、パスワードリセットのメールという事で動的なものではないので、protectedで宣言時に設定してしまっていますが、動的に設定したい場合はこれに限りません。$token;}コンストラクタです。ここで引数を受け取り、変数$tokenへ値をセットしています。変数$titleを動的にしたい場合はトークンと同じくここでセットする流れにすればOKです。['mail'];}ここは生成したデフォルトのままですが、Notificationクラスはその名の通り「通知」を行うクラスなので、その手段をここで設定できます。デフォルトではメールになっているので、そのまま使用します。]);}ここで通知の為のメールテンプレートやタイトルをセットしています。デフォルトではそのままメール文を記述していますが、ここではviewメソッドを使ってテンプレートを指定しています。引数にテンプレート、第二引数にテンプレートへ渡す値を指定しています。ここでは、トークンを含めたパスワードリセットページのRLを渡しています。通知クラスの切り替えメールテンプレートを作成し、それを用いての通知クラスを作成できたので、最後にこれらをデフォルトの通知クラスからこちらへ切り替えます。Laravelではもちろん、既にパスワードリセットの全てが実装されていますが、パスワードリセット通知を司るsendPasswordResetNotificationメソッドをオーバーライド(上書き)する事で、通知クラスを切り替える事が出来ます。laravel/app/User.phpを開いて、下記のようにsendPasswordResetNotificationメソッドをオーバーライドします。}}メソッドを追記するのはもちろんですが、新しく作成した通知クラスPasswordResetNotificationを使用しているので、ファイルの冒頭でuseするのを忘れないでください。App\Notifications\PasswordResetNotification;動作確認それでは動作確認を行います。http://YOUR-DOMAIN/password/resetにアクセスするとパスワードリセットのためのメールアドレス入力フォームが表示されますので、ユーザ登録済みのメールアドレスを入力してメールを受信してみます。デフォルトのパスワードリセットメール今回カスタマイズしたパスワードリセットメール自作のメールテンプレートに切り替わりました。これでパスワードリセットメールのカスタマイズ実装は完了です。まとめ以上で作業は完了です。LaravelなどのPHPフレームワークが持つ基本機能をカスタマイズするには多少のコツが必要ですが、少しコードを読み進めれば意外とすんなりわかったりするので、是非試してみてください。SESを使ってAPIメール送信を行う(Mailableクラス&SimpleEmailService)2019.12.3MySQL8.0.16で追加されたCHECK制約を試してみる。RitoLaboこのサイトについて利用規約プライバシーポリシ。