# Email Verification
- [简介](#introduction)
- [数据库注意事项](#verification-database)
- [路由](#verification-routing)
- [保护路由](#protecting-routes)
- [视图](#verification-views)
- [Email 认证之后](#after-verifying-emails)
- [事件](#events)
## 简介
很多 Web 应用会要求用户在使用之前进行 Email 地址验证。Laravel 不会强迫你在每个应用中重复实现它,而是提供了便捷的方法来发送和校验电子邮件的验证请求。
### Model 准备
在开始之前,需要验证你的 `App\User` 模型是否实现了 `Illuminate\Contracts\Auth\MustVerifyEmail` 契约:
## 数据库注意事项
#### Email 验证字段
接下来,你的 `user` 需要包含一个 `email_verified_at` 字段用来存储 Email 地址通过验证的时间。默认情况下,Laravel 框架中 `users` 表的数据迁移已经包含了这个字段。所以,您需要做的就只是执行数据库迁移:
php artisan migrate
## 路由
Laravel 的 `Auth\VerificationController` 类包含了发送验证链接和验证 Email 的必要逻辑。通过将 `verify` 选项传给 `Auth::routes` 方法,就能为这个控制器注册所需要的路由:
Auth::routes(['verify' => true]);
### 保护路由
[路由中间件](/docs/{{version}}/middleware) 可用于仅允许经过验证的用户访问指定路由。Laravel 附带了 `verified` 中间件,它定义在 `Illuminate\Auth\Middleware\EnsureEmailIsVerified`。由于此中间件已在应用程序的HTTP内核中注册,因此您需要做的就是将中间件附加到路由定义:
Route::get('profile', function () {
// Only verified users may enter...
})->middleware('verified');
## 视图
Laravel 会在你执行 `make:auth` 命令时为你生成邮件验证所必须的视图文件,视图文件的位置在 `resources/views/auth/verify.blade.php`,你可以根据自己的应用自由地调整这些视图的样式。
## 邮箱认证之后
在邮箱认证之后,用户会自动被重定向至 `/home`。你可通过在 `VerificationController` 中定义一个 `redirectTo` 方法或者属性来调整认证之后的跳转位置。
protected $redirectTo = '/dashboard';
## 事件
Laravel 可以在验证过程中触发 [事件](/docs/{{version}}/events) , 你应该在 `EventServiceProvider` 中注册监听者:
/**
* 应用程序的事件监听器
*
* @var array
*/
protected $listen = [
'Illuminate\Auth\Events\Verified' => [
'App\Listeners\LogVerifiedUser',
],
];