Breezeを使うとデフォルトでメール認証が外れている。
これを有効化する方法をメモとして残しておく。
Table of Contents
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」にリンクを踏んだ日時が入り、認証が完了となる。
※ローカル上ではあくまでもダミーとして扱われるので、本番環境ではまた扱いが異なる。
また、何も表示されない場合は、そのままもう一度認証メールを飛ばせば表示されるはずだ。