ホーム
Sponserd by↑転職したい人向け、ベンチャー企業の採用動画があります

Laravel6 Authのメールアドレスの認証を実装してみる(VerifyEmail)

メールアドレスの認証を実装したので、備忘録です。

Laravel の公式ドキュメントhttps://readouble.com/laravel/6.x/ja/verification.html

の要約というか自分の言葉にしたものです。

⇨ おすすめの Laravel 学習用の本

  1. モデルの編集
  2. ルートを編集
  3. middleware の verified を追加する
  4. メールドライバーの設定
  5. .env を変えたらやること
  6. 謎、メール認証(Email Verify)って何よ?なんなのよ?どんだけ〜

① モデルの編集

User.php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

//下記のように変更(implementsを追記)
class User extends Authenticatable implements MustVerifyEmail

② ルートを編集

web.php

//ユーザー認証を作成した時に自動的に作成されるルートを下記のように変更
Auth::routes(['verify' => true]);

③middleware の verified を追加する

(現在 auth 認証がないと表示されないページ全てに指定してください

例えば

HomeController.php

public function __construct()
    {
        $this->middleware(['auth','verified']);
    }

または、 web.php を

Route::group(['middleware' => ['auth','verified']], function () {
   ~~~
}

に変更することによって使えます。個人的には web.php で Group する方がわかりやすと思っています。

④ メールドライバーの設定

開発中は mailtrap が簡単だと思います。

実際には AWS の SES や Sendgrid を使うことになると思いますが、.env を書き換えるだけで使えるみたいです。

mailtrap は、開発中、メール送信をテストするもので、登録されているメールアドレスに本当に送信しないでくれるものです。

送信されたメールは mailtrap の管理画面で見れます。

メールトラップの公式ページ

このページでログインをして、

.env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=???
MAIL_PASSWORD=??
MAIL_FROM_ADDRESS=from@example.com
MAIL_FROM_NAME=Example

この部分をコピーして.env に貼ります。初期が Rails なので Laravel で探してください。

⑤.env を変えたらやること

ターミナルで

php artisan config:cache

叩きます。

以上で完成です!

びっくりしますよね。

ログインすると、英語ですがメール送信しますか?と出て、メール送信するを押すと、mailtrap にメールが届いて、ボタンをクリックすると、認証されます。

⑥ 謎、メール認証(Email Verify)って何よ?なんなのよ?どんだけ〜

User のカラムを見てみましょう。

email_verified_at

というカラムがあります。そこに日付が入ったことにより認証されたと見なします。

ようするに、ミドルウェアはここのカラム見て通すか通さないかを判断してるってことですね。

自分ら何もやってないですが、そういう設計になっているので、設計図の通り僕らは使いましょう!

「メール送信してね」の画面や、「送られてくるメール」の画面は自作したり日本語化したりできます。

ただ、この記事でやってしまうと、「認証に本当に必要な部分」ってのがあやふやになるので、やりません。

自分の知らないところを実装するのって疲れますしね。

とりあえず、この記事で「メール認証」の部分だけ設定して、見た目の部分は他の記事を参照して実装するとわかりやすいと思います。(個人的に)

Laravel のオススメの本はこちらです。