メールアドレスでユーザー登録するアプリケーションでは、登録されたメールアドレスにログイン用の確認メールを送信するいわゆる【メール認証(検証)】という仕組みがありますが、最新のLaravelにはその仕組みが用意されています。

通常のlaravel new コマンドで–authオプションを付加してアプリケーションを作成します。

laravel new [AppName] --auth

.envファイルの「MAIL_」セクションに既存のSMTPサーバーを登録します。

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=*****@gmail.com
MAIL_PASSWORD=*************
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=*****@gmail.com
MAIL_FROM_NAME="${APP_NAME}"

App/User.phpファイルにLaravel MustVerifyEmailコントラクトを実装します。

 

<?php

namespace App;

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


class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;
    protected $fillable = [
        'name', 'email', 'password',
    ];
    protected $hidden = [
        'password', 'remember_token',
    ];
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

検証ルートの追加

Auth::routes(['verify' => true]);

これは、email/verifyし、email/resendするということです

電子メール検証ミドルウェアの追加

app/Http/Controllers/HomeController.php

 class HomeController extends Controller
{
    public function __construct()
    {
        $this->middleware('verified');
    }
.......
}