Email 認(rèn)證
Email 認(rèn)證
Email Verification
簡(jiǎn)介
很多 Web 應(yīng)用會(huì)要求用戶在使用之前進(jìn)行 Email 地址驗(yàn)證。Laravel 不會(huì)強(qiáng)迫你在每個(gè)應(yīng)用中重復(fù)實(shí)現(xiàn)它,而是提供了便捷的方法來(lái)發(fā)送和校驗(yàn)電子郵件的驗(yàn)證請(qǐng)求。
Model 準(zhǔn)備
在開(kāi)始之前,需要驗(yàn)證你的 App\User
模型是否實(shí)現(xiàn)了 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; // ... }
數(shù)據(jù)庫(kù)注意事項(xiàng)
Email 驗(yàn)證字段
接下來(lái),你的 user
需要包含一個(gè) email_verified_at
字段用來(lái)存儲(chǔ) Email 地址通過(guò)驗(yàn)證的時(shí)間。默認(rèn)情況下,Laravel 框架中 users
表的數(shù)據(jù)遷移已經(jīng)包含了這個(gè)字段。所以,您需要做的就只是執(zhí)行數(shù)據(jù)庫(kù)遷移:
php artisan migrate
路由
Laravel 的 Auth\VerificationController
類包含了發(fā)送驗(yàn)證鏈接和驗(yàn)證 Email 的必要邏輯。通過(guò)將 verify
選項(xiàng)傳給 Auth::routes
方法,就能為這個(gè)控制器注冊(cè)所需要的路由:
Auth::routes(['verify' => true]);
保護(hù)路由
路由中間件 可用于僅允許經(jīng)過(guò)驗(yàn)證的用戶訪問(wèn)指定路由。Laravel 附帶了 verified
中間件,它定義在 Illuminate\Auth\Middleware\EnsureEmailIsVerified
。由于此中間件已在應(yīng)用程序的 HTTP 內(nèi)核中注冊(cè),因此您需要做的就是將中間件附加到路由定義:
Route::get('profile', function () { // Only verified users may enter... })->middleware('verified');
視圖
Laravel 會(huì)在你執(zhí)行 make:auth
命令時(shí)為你生成郵件驗(yàn)證所必須的視圖文件,視圖文件的位置在 resources/views/auth/verify.blade.php
,你可以根據(jù)自己的應(yīng)用自由地調(diào)整這些視圖的樣式。
郵箱認(rèn)證之后
在郵箱認(rèn)證之后,用戶會(huì)自動(dòng)被重定向至 /home
。你可通過(guò)在 VerificationController
中定義一個(gè) redirectTo
方法或者屬性來(lái)調(diào)整認(rèn)證之后的跳轉(zhuǎn)位置。
protected $redirectTo = '/dashboard';
事件
Laravel 可以在驗(yàn)證過(guò)程中觸發(fā) 事件 , 你應(yīng)該在 EventServiceProvider
中注冊(cè)監(jiān)聽(tīng)者:
/** * 應(yīng)用程序的事件監(jiān)聽(tīng)器 * * @var array */ protected $listen = [ 'Illuminate\Auth\Events\Verified' => [ 'App\Listeners\LogVerifiedUser', ], ];