Laravel8.xでBreezeを利用したメール認証の実装で見落としていたこと


目的

  • Laravel8.xにおいて,認証のスターターキットとしてBreezeを導入した。
  • メール認証機能を追加しようと思ったが,うまくいかなかった。
  • 試行錯誤してうまくいった方法と,その理由をこの記事に供養します。

前提

  • 以下のコードでBreezeをLaravelプロジェクトに導入していること.
  • 以下の環境です。MAMPでサーバーを立ち上げています。
ハードウェア OS
macbookAir2020(Intel) BigSur 11.3 Beta
項目 バージョン
PHP 7.4.2
Laravel 8.29.0
MySQL 5.7.26
MAMP -
console
$ curl -s https://laravel.build/example-app | bash
$ cd example-app
$ php artisan migrate
$ composer require laravel/breeze --dev
$ php artisan breeze:install
$ npm install
$ npm run dev 

方法

以下では,Breezeを用いてメール認証をする方法を記載します。

Userの変更

モデルUserに Illuminate\Contracts\Auth\MustVerifyEmail を追加する

app\Models\User.php
+ use Illuminate\Contracts\Auth\MustVerifyEmail;

- class User extends Authenticatable
{
   ...
}
+ class User extends Authenticatable implements MustVerifyEmail
{
   ...
}

ルーティングの変更

ここが他記事と異なる部分です。Laravel/uiを用いている場合は

routes/web.php
+ Auth::routes(["verify"=>true]);

とすればいいところなのですが,Breezeの場合は

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

となります。というのも,Breezeの場合はLaravel/UIをインストールしていないためです。

参考文献

https://qiita.com/nekyo/items/03e50b4d0dd6f09287d6
https://dev.to/dendihandian/laravel-email-verification-3lfa