Email 認證
Email 認證
Email Verification
簡介
很多 Web 應用會要求用戶在使用之前進行 Email 地址驗證。Laravel 不會強迫你在每個應用中重復實現它,而是提供了便捷的方法來發(fā)送和校驗電子郵件的驗證請求。
Model 準備
在開始之前,需要驗證你的 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; // ... }
數據庫注意事項
Email 驗證字段
接下來,你的 user
需要包含一個 email_verified_at
字段用來存儲 Email 地址通過驗證的時間。默認情況下,Laravel 框架中 users
表的數據遷移已經包含了這個字段。所以,您需要做的就只是執(zhí)行數據庫遷移:
php artisan migrate
路由
Laravel 的 Auth\VerificationController
類包含了發(fā)送驗證鏈接和驗證 Email 的必要邏輯。通過將 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');
視圖
Laravel 會在你執(zhí)行 make:auth
命令時為你生成郵件驗證所必須的視圖文件,視圖文件的位置在 resources/views/auth/verify.blade.php
,你可以根據自己的應用自由地調整這些視圖的樣式。
郵箱認證之后
在郵箱認證之后,用戶會自動被重定向至 /home
。你可通過在 VerificationController
中定義一個 redirectTo
方法或者屬性來調整認證之后的跳轉位置。
protected $redirectTo = '/dashboard';
事件
Laravel 可以在驗證過程中觸發(fā) 事件 , 你應該在 EventServiceProvider
中注冊監(jiān)聽者:
/** * 應用程序的事件監(jiān)聽器 * * @var array */ protected $listen = [ 'Illuminate\Auth\Events\Verified' => [ 'App\Listeners\LogVerifiedUser', ], ];