如何在Laravel中實現Email驗證與兩步驟驗證(強化網站安全的完整教學)

更新於 發佈於 閱讀時間約 9 分鐘

網站的安全性對於保護用戶資料和防止惡意攻擊至關重要。對於許多應用來說,實現Email驗證和兩步驟驗證(2FA)是增強用戶安全的一種有效方式。今天將探索如何在Laravel框架中實現這兩項功能,並結合Google Gmail的應用程式密碼,從而保障你網站的用戶帳號安全。

什麼是Email驗證?

Email驗證是一個過程,確保用戶提供的電子郵件地址有效且可用。通常,這包括向用戶的郵箱發送一封驗證郵件,當用戶點擊郵件中的鏈接時,標誌著他們已經驗證其電子郵件地址。

什麼是兩步驟驗證(2FA)?

兩步驟驗證(2FA)是一種安全機制,它要求用戶在登入時提供兩種不同的認證方式。通常,這會是用戶的密碼和從手機或應用程序中生成的臨時代碼。這樣即使駭客知道你的密碼,沒有第二步的驗證,也無法登入你的帳號。

在Laravel中設置Email驗證

1. 開啟Google帳戶的兩步驟驗證

首先,你需要確保你的Gmail帳戶開啟了兩步驟驗證。這樣可以增強帳戶的安全性:

  1. 登錄到你的Gmail帳戶。
  2. 前往Google帳戶安全性設置。
  3. 在「登入Google」部分,啟用「兩步驟驗證」。
  4. 開啟後,Google會要求你設置應用程式密碼,用來授權非Google應用程序(如Laravel)的訪問。

2. 在Laravel中配置Email驗證

接下來,將展示如何在Laravel中實現Email驗證功能。

2.1 開啟應用程式密碼

在Gmail設置中,開啟「應用程式密碼」,並創建一組密碼來讓Laravel與Gmail進行連接。這段密碼將在.env檔案中使用,確保與Laravel郵件功能兼容。

2.2 配置.env文件

打開你的 .env 文件,並設置以下內容以配置SMTP郵件發送:

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=你的Gmail帳戶
MAIL_PASSWORD=應用程式密碼
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=你的Gmail帳戶
MAIL_FROM_NAME="${APP_NAME}"

這樣,Laravel就能通過Google的SMTP伺服器發送郵件。

2.3 更新User模型以支持Email驗證

User模型中,我們需要實現MustVerifyEmail接口,這樣Laravel將自動處理Email驗證功能。

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail; //引入Email驗證接口
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable implements MustVerifyEmail //實現MustVerifyEmail接口
{
use HasApiTokens;
use HasFactory;
use Notifiable;

/**
* 用戶可批量賦值的屬性
* @var array<int, string>
*/
protected $fillable = [
'name',
'email',
'password',
];

/**
* 隱藏於JSON序列化中的屬性
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];

/**
* 要進行類型轉換的屬性
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime', //將email_verified_at轉換為時間格式
'password' => 'hashed', //密碼加密處理
];
}

這段程式確保用戶需要經過Email驗證才能進行登錄,email_verified_at字段會在用戶成功驗證後自動填入驗證時間。

2.4 自訂Email驗證通知

如果你希望自訂Email驗證的內容(如郵件主題、內容),你可以在 AuthServiceProvider 中進行設定。

<?php

namespace App\Providers;

use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
public function boot(): void
{
// 自訂驗證郵件的內容
VerifyEmail::toMailUsing(function ($notifiable, $url) {
return (new MailMessage)
->subject('驗證您的電子郵件')
->line('請點擊下面的按鈕來完成Email驗證。')
->action('驗證帳號', $url);
});
}
}

這樣當用戶註冊後,會收到一封自訂內容的驗證郵件。

2.5 添加驗證中介層至路由

為了保護某些需要Email驗證的路由,你可以使用verified中介層來限制只有已經驗證的用戶才能訪問這些路由。

Route::prefix('admin')->middleware(['auth', 'verified'])->group(function () {
Route::get('/', function () {
return Inertia::render('Backend/Dashboard');
})->name('dashboard');
});

這段程式確保用戶必須先驗證其Email地址,才能訪問/admin路由。

驗證成功後

  • 在資料庫的users表中,當用戶驗證成功後,email_verified_at欄位會被填入具體的驗證時間,否則它的值為null
  • 用戶需要先通過驗證郵件中的連結,才可以成功登錄並訪問受保護的頁面。

結語

通過上述步驟,不僅在Laravel中成功實現了Email驗證,還加強了應用的安全性,確保用戶的帳號不易被盜用。這不僅提升了網站的防禦力,也為用戶提供了更好的保護。兩步驟驗證和Email驗證是現代Web應用中不可或缺的安全措施。接下來會介紹在Laravel中實現郵件通知。


對於這類的撰寫方式習慣嗎?歡迎多多進行良性的知識交流喔!目前是在學習階段,大家有不同看法的話歡迎進行良性的知識交流!

 

大家可以考慮多多分享文章和考慮訂閱沙龍方案或贊助等喔!不過請注意不要違反著作權等行為。當然決定權都在於您,不會干涉您的任何決定。

 

提醒,文章僅供正當的知識參考,文章不負任何責任。


留言
avatar-img
留言分享你的想法!
avatar-img
阿棋的沙龍
2會員
34內容數
有軟體開發相關文章。
阿棋的沙龍的其他內容
2025/02/19
在現代的Web應用中,發送即時郵件通知是一項常見的需求。無論是訂單狀態更新、賬單付款通知,還是帳號活動警報,這些通知都能讓用戶即時了解重要信息,並提升使用者體驗。今天,將介紹如何在Laravel中實現一個簡單的郵件通知系統,並演示如何使用通知來通知使用者。
2025/02/19
在現代的Web應用中,發送即時郵件通知是一項常見的需求。無論是訂單狀態更新、賬單付款通知,還是帳號活動警報,這些通知都能讓用戶即時了解重要信息,並提升使用者體驗。今天,將介紹如何在Laravel中實現一個簡單的郵件通知系統,並演示如何使用通知來通知使用者。
2025/02/05
在現代網絡安全環境中,網站的安全性至關重要。為了確保你的網站免受各種攻擊,進行網站弱點掃描是不可或缺的一步。今天,將介紹一個強大且免費的網站安全掃描工具——OWASP ZAP(Zed Attack Proxy),它不僅功能強大,且易於使用,適合各種用戶,無論你是初學者還是資深的安全專家。
2025/02/05
在現代網絡安全環境中,網站的安全性至關重要。為了確保你的網站免受各種攻擊,進行網站弱點掃描是不可或缺的一步。今天,將介紹一個強大且免費的網站安全掃描工具——OWASP ZAP(Zed Attack Proxy),它不僅功能強大,且易於使用,適合各種用戶,無論你是初學者還是資深的安全專家。
2025/01/29
在Laravel的後臺管理系統中,Middleware和Validate是兩個強大的工具,它們能幫助我們進行用戶權限管理、資料驗證及安全性加強。在這篇文章中,將介紹如何利用這些工具,來增強Laravel應用的權限控制和資料驗證。
2025/01/29
在Laravel的後臺管理系統中,Middleware和Validate是兩個強大的工具,它們能幫助我們進行用戶權限管理、資料驗證及安全性加強。在這篇文章中,將介紹如何利用這些工具,來增強Laravel應用的權限控制和資料驗證。
看更多
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
什麼是多因素驗證 (MFA)? 多因素驗證 (MFA) 是一種登入保護機制,需要使用者提供多個不同的驗證方式來確認身份。除了輸入密碼,使用者還可能需要: 輸入發送到手機的驗證碼 掃描指紋或面部 回答安全問題 這樣即使密碼被盜用,未經授權的用戶也很難登入帳戶。 為什麼需要多因素
Thumbnail
什麼是多因素驗證 (MFA)? 多因素驗證 (MFA) 是一種登入保護機制,需要使用者提供多個不同的驗證方式來確認身份。除了輸入密碼,使用者還可能需要: 輸入發送到手機的驗證碼 掃描指紋或面部 回答安全問題 這樣即使密碼被盜用,未經授權的用戶也很難登入帳戶。 為什麼需要多因素
Thumbnail
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
  最近有傳出一些粉絲團的管理帳號被盜了,要嘛費盡千辛萬苦才拿回來,要嘛只能重啟爐灶,還要宣告自己的原粉絲團作廢,私人帳號其實也有類似的問題。   現在FB新增了一個“雙重驗證”的功能,不得不說這是好功能,但也不得不說這是一個很難找到的功能,讓老爹我來用實際操作來讓大家知道怎麼設定吧。  
Thumbnail
  最近有傳出一些粉絲團的管理帳號被盜了,要嘛費盡千辛萬苦才拿回來,要嘛只能重啟爐灶,還要宣告自己的原粉絲團作廢,私人帳號其實也有類似的問題。   現在FB新增了一個“雙重驗證”的功能,不得不說這是好功能,但也不得不說這是一個很難找到的功能,讓老爹我來用實際操作來讓大家知道怎麼設定吧。  
Thumbnail
這邊練習串接Google reCAPTCHA,簡單介紹Google reCAPTCHA v3。 Google reCAPTCHA v3 是一種幫助網站和應用程序識別和阻止惡意機器人和自動化攻擊,它由 Google 提供,旨在與傳統的 reCAPTCHA v2 不同,reCAPTCHA v3 不需要使
Thumbnail
這邊練習串接Google reCAPTCHA,簡單介紹Google reCAPTCHA v3。 Google reCAPTCHA v3 是一種幫助網站和應用程序識別和阻止惡意機器人和自動化攻擊,它由 Google 提供,旨在與傳統的 reCAPTCHA v2 不同,reCAPTCHA v3 不需要使
Thumbnail
如何防止駭客及帳號被盜用時的處理方法 在網路即現實的時代,兩個月前我的臉書粉專帳號被盜用並且被移除管理權限,與臉書溝通求助將近四週卻仍舊沒被正視問題後,我在IG發布了這篇貼文,將整件事的經過寫了出來。 這件事情的發生,讓我更審慎地思考了很多網路財產和資訊安全的問題,因此決定寫下這篇文章,希望讓看到這
Thumbnail
如何防止駭客及帳號被盜用時的處理方法 在網路即現實的時代,兩個月前我的臉書粉專帳號被盜用並且被移除管理權限,與臉書溝通求助將近四週卻仍舊沒被正視問題後,我在IG發布了這篇貼文,將整件事的經過寫了出來。 這件事情的發生,讓我更審慎地思考了很多網路財產和資訊安全的問題,因此決定寫下這篇文章,希望讓看到這
Thumbnail
每年的5月8日是“世界密碼日”(World Password Day),Google通過其安全播客分享了如何使密碼管理更簡單更安全,同時,Google也正在計劃為使用者創造一個根本不再需要密碼的網路世界。這聽起來似乎有些不可思議,也許在未來你不用再擔心Line忘記密碼、iPhone密碼忘記的問題!
Thumbnail
每年的5月8日是“世界密碼日”(World Password Day),Google通過其安全播客分享了如何使密碼管理更簡單更安全,同時,Google也正在計劃為使用者創造一個根本不再需要密碼的網路世界。這聽起來似乎有些不可思議,也許在未來你不用再擔心Line忘記密碼、iPhone密碼忘記的問題!
Thumbnail
3月22日,No. 81,保護你的帳號最重要的事 如果你需要看這篇文章,可能你對資安毫無概念,我們就不要廢話介紹細節跟原理,只說結論跟方法。
Thumbnail
3月22日,No. 81,保護你的帳號最重要的事 如果你需要看這篇文章,可能你對資安毫無概念,我們就不要廢話介紹細節跟原理,只說結論跟方法。
Thumbnail
Laravel中透過SMTP寄信,出現類似這種錯誤訊息: Failed to authenticate on SMTP server with username \"xxx@gmail.com\" using 3 possible authenticators. Authenticator LOGI
Thumbnail
Laravel中透過SMTP寄信,出現類似這種錯誤訊息: Failed to authenticate on SMTP server with username \"xxx@gmail.com\" using 3 possible authenticators. Authenticator LOGI
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News