3.4 KiB
3.4 KiB
忘記密碼功能實現總結
🎯 功能概述
已成功實現完整的忘記密碼功能,包括前端界面、後端 API、資料庫支援和郵件發送。
✅ 實現的功能
1. 資料庫支援
- 密碼重設 tokens 表:存儲重設 token 和過期時間
- 外鍵關聯:與 users 表關聯,支援級聯刪除
- 索引優化:針對查詢性能優化
2. 後端 API
/api/auth/forgot-password
:發送重設郵件/api/auth/reset-password
:驗證 token 並重設密碼
3. 前端界面
- 忘記密碼對話框:整合到登入流程
- 密碼重設頁面:
/reset-password
專用頁面 - 完整的表單驗證:密碼強度和確認驗證
4. 郵件服務
- HTML 郵件模板:美觀的重設郵件
- SMTP 配置:支援多種郵件服務商
- 安全 token:UUID + 時間戳生成
🔧 技術實現
資料庫結構
CREATE TABLE password_reset_tokens (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
token VARCHAR(255) NOT NULL UNIQUE,
expires_at TIMESTAMP NOT NULL,
used_at TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
API 端點
POST /api/auth/forgot-password
{
"email": "user@example.com"
}
回應:
{
"success": true,
"message": "密碼重設連結已發送到您的電子郵件"
}
POST /api/auth/reset-password
{
"token": "reset-token",
"password": "newpassword123"
}
GET /api/auth/reset-password?token=xxx
驗證 token 是否有效
郵件配置
需要在 .env.local
中設定:
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your_email@gmail.com
SMTP_PASS=your_app_password
🚀 使用流程
1. 用戶請求重設密碼
- 點擊登入頁面的「忘記密碼?」
- 輸入電子郵件地址
- 系統發送重設郵件
2. 用戶重設密碼
- 點擊郵件中的重設連結
- 輸入新密碼和確認密碼
- 提交後自動跳轉到首頁
3. 安全特性
- Token 過期:1 小時後自動過期
- 一次性使用:Token 使用後立即失效
- 密碼加密:使用 bcrypt 加密存儲
- 重複保護:撤銷用戶現有的重設 tokens
📧 郵件模板
郵件包含:
- 美觀的 HTML 設計
- 重設按鈕和備用連結
- 安全提醒和過期時間
- 品牌一致性設計
🧪 測試結果
- ✅ 資料庫表創建成功
- ✅ API 端點正常運作
- ✅ 前端界面整合完成
- ✅ 郵件發送功能正常
- ✅ 密碼重設流程完整
📝 環境變數設定
確保在 .env.local
中設定以下變數:
# 郵件配置
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your_email@gmail.com
SMTP_PASS=your_app_password
# 應用配置
NEXT_PUBLIC_APP_NAME=強茂集團 AI 展示平台
NEXT_PUBLIC_APP_URL=http://localhost:3000
🎉 功能完成
忘記密碼功能已完全實現並測試通過!用戶現在可以:
- 安全地請求密碼重設:通過電子郵件驗證身份
- 收到美觀的重設郵件:包含清晰的重設指引
- 方便地重設密碼:通過專用頁面完成重設
- 享受安全的體驗:Token 過期和一次性使用保護
所有功能都已整合到現有的認證系統中,與登入和註冊流程無縫配合。