邮箱验证

简介

很多 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。可以通过定义 VerificationControllerredirectTo 方法或属性自定义验证请求后重定向的位置:

protected $redirectTo = '/dashboard';