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',
    ],
];