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

如何在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
阿棋的沙龍
2會員
34內容數
有軟體開發相關文章。
留言
avatar-img
留言分享你的想法!
阿棋的沙龍 的其他內容
在現代網絡安全環境中,網站的安全性至關重要。為了確保你的網站免受各種攻擊,進行網站弱點掃描是不可或缺的一步。今天,將介紹一個強大且免費的網站安全掃描工具——OWASP ZAP(Zed Attack Proxy),它不僅功能強大,且易於使用,適合各種用戶,無論你是初學者還是資深的安全專家。
在Laravel的後臺管理系統中,Middleware和Validate是兩個強大的工具,它們能幫助我們進行用戶權限管理、資料驗證及安全性加強。在這篇文章中,將介紹如何利用這些工具,來增強Laravel應用的權限控制和資料驗證。
在現代 Web 應用中,實現用戶登入功能是非常基本且重要的步驟。本文將帶您了解如何在 Laravel 中構建一個完整的登入系統,涵蓋後端處理邏輯、前端表單設計以及相關的路由和中間件設定。這篇指南旨在幫助您建立一個簡潔且可擴展的登入流程。
在開發 Web 應用時,管理大量資料通常需要處理分頁和格式化顯示的需求。本文將介紹如何在 Laravel 中實現 時間格式轉換 以及 分頁功能,並用實際案例來展示如何將這些功能整合到你的應用程式中。
在這篇文章中,我們將深入探討如何在 Laravel 應用程式中處理檔案上傳。我們將從前端頁面的檔案選擇到後端儲存與顯示檔案的完整流程,涵蓋從用戶選擇檔案,到將其上傳並保存在伺服器,直到如何在資料庫中儲存檔案路徑,並在頁面上顯示它們。這些步驟將有助於您瞭解如何在 Laravel 中高效地處理檔案上傳。
在這篇文章中,將介紹如何使用 Laravel 和 Vue 3,並搭配 Inertia.js 來建立一個簡單的電影資料管理系統。我們將涵蓋電影資料的新增、編輯、刪除等基本操作,並且實現動態更新頁面而不需重新載入。
在現代網絡安全環境中,網站的安全性至關重要。為了確保你的網站免受各種攻擊,進行網站弱點掃描是不可或缺的一步。今天,將介紹一個強大且免費的網站安全掃描工具——OWASP ZAP(Zed Attack Proxy),它不僅功能強大,且易於使用,適合各種用戶,無論你是初學者還是資深的安全專家。
在Laravel的後臺管理系統中,Middleware和Validate是兩個強大的工具,它們能幫助我們進行用戶權限管理、資料驗證及安全性加強。在這篇文章中,將介紹如何利用這些工具,來增強Laravel應用的權限控制和資料驗證。
在現代 Web 應用中,實現用戶登入功能是非常基本且重要的步驟。本文將帶您了解如何在 Laravel 中構建一個完整的登入系統,涵蓋後端處理邏輯、前端表單設計以及相關的路由和中間件設定。這篇指南旨在幫助您建立一個簡潔且可擴展的登入流程。
在開發 Web 應用時,管理大量資料通常需要處理分頁和格式化顯示的需求。本文將介紹如何在 Laravel 中實現 時間格式轉換 以及 分頁功能,並用實際案例來展示如何將這些功能整合到你的應用程式中。
在這篇文章中,我們將深入探討如何在 Laravel 應用程式中處理檔案上傳。我們將從前端頁面的檔案選擇到後端儲存與顯示檔案的完整流程,涵蓋從用戶選擇檔案,到將其上傳並保存在伺服器,直到如何在資料庫中儲存檔案路徑,並在頁面上顯示它們。這些步驟將有助於您瞭解如何在 Laravel 中高效地處理檔案上傳。
在這篇文章中,將介紹如何使用 Laravel 和 Vue 3,並搭配 Inertia.js 來建立一個簡單的電影資料管理系統。我們將涵蓋電影資料的新增、編輯、刪除等基本操作,並且實現動態更新頁面而不需重新載入。