Laravel 电子邮件验证

简介

许多Web应用程序要求用户在使用该应用程序之前先验证其电子邮件地址。Laravel提供了便捷的方法来发送和验证电子邮。


model准备

首先,请确认我们的App\User模型已实现Illuminate\Contracts\Auth\MustVerifyEmail接口:

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

数据库注意事项

电子邮件验证列

接下来,user表必须包含一个email_verified_at列,用于存储验证电子邮件地址的日期和时间。默认情况下,Laravel框架自带的migrate已经包含表users已包含此列。因此,需要做的就是运行数据库migrate:

$ php artisan migrate

路由

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

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

保护路由

路由中间件只能用于允许经过验证的用户访问给定的路由。Laravel自带了verified中间件,该中间件在Illuminate\Auth\Middleware\EnsureEmailIsVerified中定义。由于此中间件已经在应用程序的HTTP内核中注册,因此需要做的就是将中间件添加到路由定义:

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

视图

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

$ composer require laravel/ui

$ php artisan ui vue --auth

电子邮件验证视图位于中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',
    ],
];

查看笔记

扫码一下
查看教程更方便