---
# System prepended metadata

title: Laravel 驗證信箱
tags: [Laravel]

---

# Laravel 驗證信箱

User model 需要 implements MustVerifyEmail：
`class User extends Authenticatable implements MustVerifyEmail`

調整路由 *routes/web.php*

// 加上 verify 參數
`Auth::routes(['verify' => true]);`

// 為路由添加 middleware `verified`，若用戶尚未驗證信箱而嘗試訪問這個頁面，會提示用戶尚未驗證信箱。
`Route::get('/', [PagesController::class, 'root'])->name('root')->middleware('verified');`
![](https://i.imgur.com/mo2WXqv.png)

而實際上，Laravel 是透過 users 表中的 `email_verified_at` 欄位來判斷用戶是否已經驗證過信箱，新註冊的用戶預設值為 `null`
![](https://i.imgur.com/9UIt7c2.png)

驗證 Email 的功能要由 mail server 來實現，查看 .env 檔得知 Laravel 預設使用的是 [mailtrap](https://mailtrap.io/)，要先註冊會員才能使用。
![](https://i.imgur.com/MDbQpyK.png)

申請完成後，進入 .env 檔修改 mail 設置
![](https://i.imgur.com/Wyw5rDg.png)

到提示驗證信箱畫面，點擊 `click here to request another`
![](https://i.imgur.com/TqvPNZw.png)

回到 mailtrap 就會收到驗證信囉
![](https://i.imgur.com/vRZq8Cq.png)

點擊 `Verify Email Address` 後就會跳轉到首頁了，也不會再出現提示驗證信箱的訊息
![](https://i.imgur.com/g8Dcbl9.png)

`email_verified_at` 也變成驗證信箱的時間
![](https://i.imgur.com/XEHYEhp.png)

新註冊的帳號也能收到驗證信
![](https://i.imgur.com/ACL81Bl.png)

這樣就測試成功囉~可以把先前添加的 middleware 去除
*routes/web.php*
`Route::get('/', [PagesController::class, 'root'])->name('root');`

###### tags: `Laravel`