整合資料庫、完成登入註冊忘記密碼功能

This commit is contained in:
2025-09-09 12:00:22 +08:00
parent af88c0f037
commit 32b19e9a0f
85 changed files with 11672 additions and 2350 deletions

View File

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