邮件验证
介绍
许多 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;
// ...
}
数据库注意事项
邮件验证列
接下来,您的 user
表必须包含一个 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 内核中注册,您只需将中间件附加到路由定义:
Route::get('profile', function () {
// 只有已验证的用户可以进入...
})->middleware('verified');
视图
执行 make:auth
命令时,Laravel 将生成所有必要的电子邮件验证视图。此视图放置在 resources/views/auth/verify.blade.php
中。您可以根据应用程序的需要自由定制此视图。
验证邮件后
电子邮件地址验证后,用户将自动重定向到 /home
。您可以通过在 VerificationController
中定义 redirectTo
方法或属性来自定义验证后的重定向位置:
protected $redirectTo = '/dashboard';
事件
Laravel 在电子邮件验证过程中调度事件。您可以在 EventServiceProvider
中附加监听器到这些事件:
/**
* 应用程序的事件监听器映射。
*
* @var array
*/
protected $listen = [
'Illuminate\Auth\Events\Verified' => [
'App\Listeners\LogVerifiedUser',
],
];