Email 认证 简介 很多 Web 应用会要求用户在使用之前进行 Email 地址验证。Laravel 不会强迫你在每个应用中重复实现它,而是提供了便捷的方法来发送和校验电子邮件的验证请求。 模型准备 在开始之前,需要验证你的 App\Models\User 模型是否实现了 Illuminate\Contracts\Auth\MustVerifyEmail 契约: ``` <?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; // ... } ``` 一旦这一接口被添加到模型中,新注册的用户将自动收到一封包含电子邮件验证链接的电子邮件。检查你的 EventServiceProvider 可以看到,Laravel 已经为 Illuminate\Auth\Events\Registered 事件附加了一个 SendEmailVerificationNotification ***。 数据库注意事项 Email 验证字段 接下来,你的 user 表必须包含一个 email_verified_at 字段用来存储 Email 地址通过验证的时间。默认情况下,Laravel 框架中 users 表的数据迁移已经包含了这个字段。所以,您需要做的就只是执行数据库迁移: ``` php artisan migrate ``` 路由 Laravel Jetstream 扩展包包含了发送验证链接和验证邮件的必要逻辑。该功能所需的路由 Jetstream 自动注册,可以通过 Composer 安装: ``` composer require laravel/jetstream php artisan jetstream:install livewire/inertia ``` 保护路由 路由中间件 可用于仅允许经过验证的用户访问指定路由。Laravel 附带了 verified 中间件,它定义在 Illuminate\Auth\Middleware\EnsureEmailIsVerified。由于此中间件已在应用程序的 HTTP 内核中注册,因此您需要做的就是将中间件附加到路由定义: ``` Route::get('profile', function () { // 只有经过验证的用户才能进入.. })->middleware('verified'); ``` 视图 如果要生成 Email 验证的所有必要视图,您可以使用 laravel/jetstream Composer 包: ``` composer require laravel/jetstream php artisan jetstream:install livewire/inertia ``` Email 验证视图文件位于 resources/views/auth/ 目录。 你可以根据自己的应用自由地调整这些视图的样式。 事件 Laravel 在 Email 验证过程中发送 事件。 你应该在 EventServiceProvider 中注册监听者: ``` /** * 应用程序的事件*** * * @var array */ protected $listen = [ 'Illuminate\Auth\Events\Verified' => [ 'App\Listeners\LogVerifiedUser', ], ]; ```