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