邮箱验证


简介

很多 Web 应用都要求用户注册之后验证邮箱地址才能登录,为此,Laravel 也提供了便捷方法来发送和验证邮箱验证请求,但是这个功能是可选的,你可以启用也可以不启用。

快速实现

如果想要快速搭建邮箱验证功能,可以基于 Laravel Jetstream 内置的认证脚手架代码。迁移完数据库后,就可以导航到 /register 或者其他 URL 进行体验,Jetstream 提供了完整的用户认证功能,包含邮箱验证支持。

模型准备

开始进行邮箱验证之前,需要检查 App\Models\User 是否实现了 Illuminate\Contracts\Auth\MustVerifyEmail 契约,如果没有的话,需要实现它:

<?php
    
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;
    
    // ...
}

一旦这个接口被添加到模型类,系统就会自动给新注册的用户发送包含邮件验证链接的邮件,正如你在 EventServiceProvider 中所看到的,Laravel 已经提供了监听 Illuminate\Auth\Events\Registered 事件的 SendEmailVerificationNotification 监听器:

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
    ];
    
    ...
    

数据库配置

邮箱验证字段

接下来,users 表必须包含 email_verified_at 字段来存储邮箱地址验证时间,默认情况下,Laravel 自带的 users 表迁移已经包含这个字段了,你所要做的就是运行数据库迁移(已运行过忽略):

php artisan migrate

路由

Laravel Jetstream 已经内置了邮箱验证功能所需的所有路由,想要了解如何安装 Jetstream,参考官方提供的 Jetstream 文档即可。

保护路由

路由中间件可用于限定经过验证的用户才能访问给定路由,Laravel 已经为我们提供了这个中间件 verified,对应的中间件类位于 Illuminate\Auth\Middleware\EnsureEmailIsVerified。由于这个中间件已经在 HTTP Kernel 中注册了,所以你要做的只是将其分配给指定路由:

Route::get('profile', function () {
    // Only verified users may enter...
})->middleware('verified');

视图

Laravel Jetstream 已经内置了邮箱验证所需要的所有视图,想要了解如何安装 Jetstream,参考官方提供的 Jetstream 文档即可。

事件

Laravel 会在邮箱验证过程中触发事件。你可以在 EventServiceProvider 中添加监听器来监听这些事件:

/**
 * The event listener mappings for the application.
 *
 * @var array
 */
protected $listen = [
    'Illuminate\Auth\Events\Verified' => [
        'App\Listeners\LogVerifiedUser',
    ],
];

实例教程


Vote Vote Cancel Collect Collect Cancel

<< 上一篇: 用户授权

>> 下一篇: 加密