[ Laravel 5.8 文档 ] 安全系列 —— 邮箱验证

简介

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

模型准备

开始进行邮箱验证之前,需要检查 App\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;

    // ...
}

数据库配置

邮箱验证字段

接下来,users 表必须包含 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 Kernel 中注册了,所以你要做的只是将其分配给指定路由:

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

视图

当我们执行完 make:auth 命令后 Laravel 会生成相应的邮箱验证视图,这个视图位于 resources/views/auth/verify.blade.php。你可以按照需要对这个视图进行个性化定制。

验证邮箱后

邮箱地址验证过之后,用户会被重定向到 /home 页面,当然,你可以通过在 VerificationController 中定义 redirectTo 方法或属性来自定义重定向路径:

protected $redirectTo = '/dashboard';

事件

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

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

相关文章推荐

学院君 has written 1343 articles

Laravel学院院长,终身学习者

积分:187397 等级:P12 职业:手艺人 城市:杭州

0 条回复

登录后才能进行评论,立即登录?