# Email 認證
許多 web 應用要求用戶在使用之前進行 Email 地址驗證。Laravel 不強迫你在每個應用中重新實現它,Laravel提供了方便的方法來發送和驗證電子郵件驗證請求。
### Model 預備
開始之前, 驗證你的`App\User`模型是否實現了`Illuminate\Contracts\Auth\MustVerifyEmail`契約。 此外,你應該使用`Illuminate\Auth\MustVerifyEmail`trait:
~~~php
<?php
namespace App;
use Illuminate\Auth\MustVerifyEmail;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Contracts\Auth\MustVerifyEmail as MustVerifyEmailContract;
class User extends Authenticatable implements MustVerifyEmailContract
{
use MustVerifyEmail, Notifiable;
// ...
}
~~~
## 數據庫注意事項
#### Email 驗證字段
接下來, 你的`user`需要包含一個`email_verified_at`字段用來存儲 Email 地址通過驗證的時間。默認的,Laravel框架中`users`表的數據遷移內已經包含了這個字段。所以,您需要做的就是執行數據庫遷移:
~~~php
php artisan migrate
~~~
## 路由
Laravel 的`Auth\VerificationController`類包含了發送驗證鏈接和驗證 Email 的所需邏輯。 要為這個控制器注冊所需的路由 , 傳遞`verify`項給`Auth::routes`方法即可 :
~~~php
Auth::routes(['verify' => true]);
~~~
### 保護路由
[路由中間件](https://laravel-china.org/docs/laravel/5.7/middleware)可用于僅允許經過驗證的用戶訪問給定路由。Laravel 附帶了`verified`中間件,它定義在`Illuminate\Auth\Middleware\EnsureEmailIsVerified`。由于此中間件已在應用程序的HTTP內核中注冊,因此您需要做的就是將中間件附加到路由定義:
~~~php
Route::get('profile', function () {
// 只有驗證過的用戶可以進入
})->middleware('verified');
~~~
## 視圖
當執行`make:auth`命令時,Laravel將生成郵箱驗證需要的所有視圖。 視圖位于`resources/views/auth/verify.blade.php`。您可以根據應用需要自定義此視圖。
## 郵箱驗證之后
在 Email 地址通過驗證之后,用戶將被重定向到`/home`。你可以通過在`VerificationController`中定義`redirectTo`方法或屬性來自定義重定向地址:
~~~php
protected $redirectTo = '/dashboard';
~~~