Laravel6 Authのメールアドレスの認証を実装してみる(VerifyEmail)
いつもご利用ありがとうございます。このブログは、広告費によって運営されています。
目次
メールアドレスの認証を実装したので、備忘録です。
Laravel の公式ドキュメントhttps://readouble.com/laravel/6.x/ja/verification.html
の要約というか自分の言葉にしたものです。
Laravel6 での実装となります。それ以降のバージョンで細かい違いについては分かりません。
① モデルの編集
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()
{
//verifiedを追加
$this->middleware(['auth','verified']);
}
または、 web.php を
//verifiedを追加
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
というカラムがあります。そこに日付が入ったことにより認証されたと見なします。
日時が入っている ⇨ 認証されている
日時が入っていない ⇨ 認証されていない
ミドルウェアはここのカラム見て通すか通さないかを判断しているようです。
まとめ
いかがでしたか?
この記事を試して動かないなど、なにかあれば Twitter などで DM いただければと思います。