【Laravel】Breezeでローカル確認用メール認証を作る

2026.04.16

Breezeを使うとデフォルトでメール認証が外れている。

これを有効化する方法をメモとして残しておく。

User.phpに2行記述を追加するだけ

やることは簡単でBreezeのUser.phpを下記のように変えるだけだ。

class User extends Authenticatable {

~~以下省略~~

{

↓ 追加


// 追加
class User extends Authenticatable implements MustVerifyEmail {

    //追加
    use HasFactory, Notifiable; 

    ~~以下省略~~

{

これらは本番環境でも必要となるので、消さないことを推奨する。

解説:「implements MustVerifyEmail」

「implements MustVerifyEmail」はメール認証を必須にする機能だ。

・登録後、メール認証が完了するまでダッシュボードに入れない
・未認証ユーザーは /verify-email に強制リダイレクト
・Laravelが認証メール送信・チェックの仕組みを自動で有効化

解説:「use HasFactory, Notifiable;」

対して「use HasFactory, Notifiable;」は下記の機能がある

・HasFactory:ファクトリー(テスト用ダミーデータ生成)に必要
・Notifiable:パスワードリセットメール・メール認証など全通知機能

Notifiable を外すとメール認証メールが送れなくなるので注意が必要だ。

ローカルの場合はコマンドで認証リンク確認

実際のメール送信はSMTP設定などめんどな作業が多いが、認証リンクが飛んでいるか否かはローカルだと簡単に検証できる。

前提として.envで下記の記述がアクティベートされている必要がある。

MAIL_MAILER=log

上記の確認がとれたら、そのままターミナルを開き、下記を入力。

sail artisan pail -v

上記のコマンドを打てば、登録したアドレスに認証リンクを含んだメールが飛んでいるかをターミナル上のログで確認することができる。

From: Laravel hello@example.com To: 〇〇@gmail.com Subject: =

~~以下省略~~

http://localhost # こんにちは メールアドレスを確認するため、下記のボタンをクリックしてください 
メールアドレスの確認: http://localhost/verify-email/~~~~

~~以下省略~~

上記の認証リンクを踏めば、DBのusersテーブルに入っている「email_verified_at」にリンクを踏んだ日時が入り、認証が完了となる。

※ローカル上ではあくまでもダミーとして扱われるので、本番環境ではまた扱いが異なる。

また、何も表示されない場合は、そのままもう一度認証メールを飛ばせば表示されるはずだ。

PIC UP