邮箱验证
简介
很多 Web 应用要求用户在使用应用之前验证其邮箱地址。Laravel 不强迫您在每个应用上重新实现该功能,而是提供了便捷的方法来发送和验证邮箱验证请求。
准备模型
首先,确保 App\User
模型实现了 Illuminate\Contracts\Auth\MustVerifyEmail
Contract:
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;
// ...
}
数据库注意事项
邮箱验证字段
接下来,user
表必须包含一个 email_verified_at
字段用于存储邮箱地址验证的日期和时间。默认情况下,Laravel 框架自带的 users
表迁移文件已经包含了该字段。因此,只需要运行数据库迁移即可:
php artisan migrate
路由
Laravel 的 Auth\VerificationController
类包含了发送验证链接和验证邮箱的所必需的逻辑。要为控制器注册所需的路由,请将 verify
项传递给 Auth::routes
方法:
Auth::routes(['verify' => true]);
保护路由
路由中间件 可用于仅允许经过验证的用户访问给定路由。Laravel 自带一个 verified
中间件,定义在 Illuminate\Auth\Middleware\EnsureEmailIsVerified
。由于此中间件已经在应用的 HTTP 内核中注册了,因此只需要将其添加到路由定义即可:
Route::get('profile', function () {
// 只有经过验证的用户可以进入
})->middleware('verified');
视图
Laravel 将在运行 make:auth
命令时生成邮箱验证所需的全部视图。该视图位于 resources/views/auth/verify.blade.php
。您可以根据应用需要自由自定义此视图。
邮箱验证后
邮箱地址验证后,用户将自动被重定向到 /home
。可以通过定义 VerificationController
的 redirectTo
方法或属性自定义验证请求后重定向的位置:
protected $redirectTo = '/dashboard';