Laravelユーザー認証・管理をカスタマイズする「メールアドレスの確認」

Laravelの認証機能とlaravel-adminを組み合わせて、ポータルサイトの実現を目指しています。

前回でユーザー登録、ログイン認証、パスワードの再発行と一通りの流れが作れました。今後は、これらに不足している部分を追加していきたいと思います。

今回は、メールアドレスの確認機能を追加します。通常のサービスでは、会員登録後に送られてくる確認メール内のURLにアクセスすると、メールアドレスの確認が完了します。これと同じ仕組みを取り入れたいと思います。

いろいろネットを探してみると、実現できそうな情報が見つかりました。(私はLaravel初心者なのでそのまま参考にさせていただきます。。。)

Laravel5.4 ユーザー登録時にメールアドレス認証を入れる
https://qiita.com/namixc/items/39577024d5aa4932103d

機能の追加

  • .evnファイルを編集し、メールが送信できるように設定
  • ユーザーテーブルに、確認用のフィールドを追加
  • ユーザーモデルに確認後の更新処理(確認用のフィールド)を追加
  • URL付き確認メールを送信するクラスを作成
  • メール内容のビューを作成
  • app/Http/Controllers/Auth/RegisterController.php に確認処理を追加
  • resources/views/auth/register.blade.php にメッセージ枠を追加
  • routes/web.php 確認処理のルーティングを追加
  • ログイン処理にチェック項目(メール認証済み?)を追加する
  • resources/views/auth/login.blade.php にメッセージ枠を追加

っとまあ、参考にさせていただいたサイトの内容どおりに追加してみました。

で、問題なくメールの確認処理が動作しました。

Laravel メールアドレスの確認メールを送信

ユーザー登録をすると、メールアドレスの確認を促すメッセージが表示されました。この後、届いているメール内のURLをクリックすると、確認が完了しました。(確認するまでは、ログインはできず、確認後はログインできました)

一部カスタマイズ

テンプレートを簡素にするためHTMLメールから、テキストメールに変更しました。(テキストメールの方が何かと楽ですからね。また、HTMLメールとテキストメールを同時に使うことも可能です)

app/Mail/EmailVerification.php

 public function build()
 {
   // メールのタイトルもここで変更
//return $this->subject('メールアドレスの登録確認')->view('email.verification');
   // view(HTMLメール)からtext(テキストメール)へ変更
   return $this->subject('メールアドレスの登録確認')->text('email.verification');
 }

その他の不足箇所

  • 確認メールの有効期限

有効期限も良く他のサービスにはあります。これの決定的な必要性は何になるのだろうか?
サーバー側(運営側)で、定期的にTokenをリセットする方法でも良いのでは?

この辺は必要性を確認してから、追加するのか?しないのか?決めたいと思います。

後は、メールアドレスの変更時に同じロジックが共有できればベストですね。

続きます・・・