Skip to content

邮件验证

介绍

许多 web 应用程序要求用户在使用应用程序之前验证他们的电子邮件地址。Laravel 提供了方便的方法来发送和验证电子邮件验证请求,而不是强迫您在每个应用程序上重新实现这一点。

模型准备

首先,确认您的 App\User 模型实现了 Illuminate\Contracts\Auth\MustVerifyEmail 接口:

php
<?php

namespace App;

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 已经包含了一个 SendEmailVerificationNotification 监听器,该监听器附加到 Illuminate\Auth\Events\Registered 事件。

数据库注意事项

邮件验证列

接下来,您的 user 表必须包含一个 email_verified_at 列,以存储电子邮件地址验证的日期和时间。默认情况下,Laravel 框架附带的 users 表迁移已经包含此列。因此,您只需运行数据库迁移:

php
php artisan migrate

路由

Laravel 包含 Auth\VerificationController 类,其中包含发送验证链接和验证电子邮件所需的逻辑。要为此控制器注册必要的路由,请将 verify 选项传递给 Auth::routes 方法:

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

保护路由

路由中间件 可用于仅允许已验证的用户访问给定路由。Laravel 附带一个 verified 中间件,该中间件在 Illuminate\Auth\Middleware\EnsureEmailIsVerified 中定义。由于此中间件已在应用程序的 HTTP 内核中注册,您只需将中间件附加到路由定义即可:

php
Route::get('profile', function () {
    // 只有已验证的用户可以进入...
})->middleware('verified');

视图

要生成电子邮件验证所需的所有视图,您可以使用 laravel/ui Composer 包:

php
composer require laravel/ui

php artisan ui vue --auth

电子邮件验证视图位于 resources/views/auth/verify.blade.php。您可以根据需要自由定制此视图以适应您的应用程序。

验证邮件后

电子邮件地址验证后,用户将自动重定向到 /home。您可以通过在 VerificationController 上定义 redirectTo 方法或属性来自定义验证后的重定向位置:

php
protected $redirectTo = '/dashboard';

事件

Laravel 在电子邮件验证过程中调度事件。您可以在 EventServiceProvider 中附加监听器到这些事件:

php
/**
 * 应用程序的事件监听器映射。
 *
 * @var array
 */
protected $listen = [
    'Illuminate\Auth\Events\Verified' => [
        'App\Listeners\LogVerifiedUser',
    ],
];