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 にメッセージ枠を追加
っとまあ、参考にさせていただいたサイトの内容どおりに追加してみました。
で、問題なくメールの確認処理が動作しました。

ユーザー登録をすると、メールアドレスの確認を促すメッセージが表示されました。この後、届いているメール内の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をリセットする方法でも良いのでは?
この辺は必要性を確認してから、追加するのか?しないのか?決めたいと思います。
後は、メールアドレスの変更時に同じロジックが共有できればベストですね。
続きます・・・