Laravelでメール認証をやる

どうもこんにちは。

前回はソーシャルログインをがんばりました。
今回は、Laravel 5.7 で追加されたメール認証(Email Velification)をやってみます。

途中までは前回と同じなので、かなり雑な記事になることをご容赦ください。

前回の記事はコチラからどうぞ
Laravelでソーシャルログインをザザッと作る


ユーザモデルを修正

こんな感じで修正します。

implements MustVerifyEmailと追記するだけでおしまいです。
php artisan make:authでUserモデルが作られたときに、
すでにuse句は入ってました。優しさに涙が出ます。


ルーティングを修正

config/web.phpを修正します。

もともと

だったところを

にするだけ。

あとは、メール認証が終わっていないとアクセスできないURLを設定しておくだけ。

今回は、Laravelの認証を有効にしたときに作られた「/home」に設定します。なので、こんな感じで編集しました。


メールの設定

.envファイルにメールの設定をしておきます。
でないと、メール飛ばないので。これは、各環境にあわせてくださいませ。
ちなみに、今回私はmailtrap.ioを使いました。
詳しくは、こちらでどうぞ。⇒mailrtap.io


試す

サーバを起動して、http://localhost:8000/registerにアクセスします。

適当に入力して、registerボタンをクリック。
すると・・・?

http://localhost:8000/email/verifyにリダイレクトしました。
念のため、http://localhost:8000/homeにアクセスしても、上の画面にリダイレクトされます(至極当然)。
確認メール再送用のリンクもありますね。
ちなみに、userテーブルには、こんな感じで登録されています。

email_verified_atがnullです。
では、送信されたメールはというと

来てますね。真ん中の「Verify Email Address」をクリックします。
すると


はい、ログインした画面になりますね。
データは、というと


email_verified_atがに日付が入って、認証完了となってます。いいですね。


ちょっと思うこと

php artisan route:listで、ルーティングの設定を見てみます。

verification.*のところが、Auth::routes(['verify' => true]);で追加されるルーティングですね。
middlewareに、authが含まれています。
authが含まれているってことは、ログインを要求されます。

Laravelでは、「メール認証されていなくてもとりあえずログインできる、けど機能が制限される」という思想で作られているようです。
本登録するまでログインもできない、という形にするのであれば、

・認証時にuser.email_verified_atがNULLの時はログイン失敗とする
・middleware”guest”(Kernel.phpによると、App\Http\Middleware\RedirectIfAuthenticatedが実体)で、ログイン済み状態判定に条件を追加
・VerificationControllerでmiddleware”auth”を適用しない

とすると、実現できるのかなーと思っています。
試す値打ちはありそうです。


まとめ

Laravel、すげーや(まとまってない)

R.TANAKAがお届けしました。

“Laravelでメール認証をやる” への 0 件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です