【Laravel Breeze】2行で完成!メール検証機能を実装する方法

こんにちはー!むちょこです。

ここでは、Laravel Breeze で実装された会員登録機能にメール検証機能を追加する方法をご紹介します。

用意されているプログラムを利用して、 User モデルクラスとルーティング設定をちょこっと変更するだけで良いのでとても簡単です♪

メール検証機能とは

会員登録時に入力されたメールアドレスが、本人が現在使っている有効なメールアドレスなのかを確認するための機能です。

この機能を実装した後は、以下のような流れで会員登録が完了するようになります。

  1. ユーザがメールアドレスを入力する
  2. メールアドレス宛に認証メールが送られる
  3. 検証メール内のURLにユーザがアクセスする
  4. アカウントが有効になる

なりすましを防ぐためにも実装しておきたいという方も多いのではないでしょうか?:)

前提

Laravel 8.83 の環境で、 Laravel Breeze がインストールしてある状態から始めます。

インストールがまだの方はこちらをどうぞ(※ マイナーバージョンは異なりますが同様の手順でインストールできます)。

5分でできる!Laravel Breezeで簡単ログイン機能導入

また、メール送信を行うので .env ファイルのメール設定も忘れずにご準備ください。

検証メールの送信

検証メールを送るための機能は予め Laravel に用意されており、User モデルクラスで MustVerifyEmail クラスを implements 宣言するだけで適用できます。

もしカスタム済みで Notifiable クラスなどの必要なクラスが抜けている場合はここで一緒に use 宣言を追加してください。

app/Models/User.php
namespace App\Models;

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

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;
}

この状態で会員登録フォームからメールアドレスを登録すると、検証メールが送信されます。

検証メール

未検証ユーザのアクセスを制限する

メールは送られるようになったものの、未検証ユーザは今まで通りログイン済みユーザ用のページにアクセスできてしまいます。

/dashboard

これでは意味がないので、検証済みユーザのみがアクセスできるように変更していきましょう。

変更方法は、制限したいページのミドルウェアを「auth」から「verified」に変えるだけです。

routes/web.php
Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['verified'])->name('dashboard');

これで未検証ユーザは「先にメールを確認してね」とお知らせする画面へリダイレクトされるようになりました。

/verify-email

ついでに検証メールの再送信ボタンも表示されます。この機能も予め用意されているのでそのままご利用いただけます。

完成

検証メールに記載されたURLをクリックしてみてください。ダッシュボードにアクセスできるようになっていたら完成です!

また、各文言を日本語化したい方はこちらをご参照ください。

3分で Jetstream を日本語化する方法