網站的安全性對於保護用戶資料和防止惡意攻擊至關重要。對於許多應用來說,實現Email驗證和兩步驟驗證(2FA)是增強用戶安全的一種有效方式。今天將探索如何在Laravel框架中實現這兩項功能,並結合Google Gmail的應用程式密碼,從而保障你網站的用戶帳號安全。
Email驗證是一個過程,確保用戶提供的電子郵件地址有效且可用。通常,這包括向用戶的郵箱發送一封驗證郵件,當用戶點擊郵件中的鏈接時,標誌著他們已經驗證其電子郵件地址。
兩步驟驗證(2FA)是一種安全機制,它要求用戶在登入時提供兩種不同的認證方式。通常,這會是用戶的密碼和從手機或應用程序中生成的臨時代碼。這樣即使駭客知道你的密碼,沒有第二步的驗證,也無法登入你的帳號。
首先,你需要確保你的Gmail帳戶開啟了兩步驟驗證。這樣可以增強帳戶的安全性:
接下來,將展示如何在Laravel中實現Email驗證功能。
在Gmail設置中,開啟「應用程式密碼」,並創建一組密碼來讓Laravel與Gmail進行連接。這段密碼將在.env檔案中使用,確保與Laravel郵件功能兼容。
打開你的 .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伺服器發送郵件。
在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
字段會在用戶成功驗證後自動填入驗證時間。
如果你希望自訂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);
});
}
}
這樣當用戶註冊後,會收到一封自訂內容的驗證郵件。
為了保護某些需要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中實現郵件通知。
對於這類的撰寫方式習慣嗎?歡迎多多進行良性的知識交流喔!目前是在學習階段,大家有不同看法的話歡迎進行良性的知識交流!
大家可以考慮多多分享文章和考慮訂閱沙龍方案或贊助等喔!不過請注意不要違反著作權等行為。當然決定權都在於您,不會干涉您的任何決定。
提醒,文章僅供正當的知識參考,文章不負任何責任。