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

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

143
AUTH_INTEGRATION_SUMMARY.md Normal file
View File

@@ -0,0 +1,143 @@
# 用戶認證系統整合總結
## 🎯 完成的工作
### 1. 資料庫 API 端點 ✅
- **`/api/auth/login`** - 用戶登入
- **`/api/auth/register`** - 用戶註冊
- **`/api/auth/profile`** - 用戶資料管理
### 2. 資料庫服務層 ✅
- 更新 `UserService` 類別,支援實例方法和靜態方法
- 密碼加密使用 `bcryptjs` (12 rounds)
- 完整的 CRUD 操作
### 3. 前端整合 ✅
- 更新 `AuthContext` 以使用資料庫 API
- 保持向後兼容性,支援現有功能
- 錯誤處理和載入狀態管理
### 4. 測試帳號生成 ✅
創建了 5 個測試帳號:
| 角色 | 電子郵件 | 密碼 | 部門 | 描述 |
|------|----------|------|------|------|
| **管理員** | admin@ai-platform.com | admin123456 | ITBU | 系統管理員,擁有所有權限 |
| **開發者** | developer@ai-platform.com | dev123456 | ITBU | 開發者,可以提交應用和提案 |
| **一般用戶** | user@ai-platform.com | user123456 | MBU1 | 一般用戶,可以瀏覽和評分 |
| **評委** | judge@ai-platform.com | judge123456 | HQBU | 評委,可以評分應用和提案 |
| **團隊負責人** | team-lead@ai-platform.com | team123456 | SBU | 團隊負責人 |
## 🔧 技術實現
### 密碼安全
- 使用 `bcryptjs` 進行密碼加密
- 12 rounds 的 salt 強度
- 密碼長度最少 6 個字符
### 資料庫結構
```sql
CREATE TABLE `users` (
`id` VARCHAR(36) PRIMARY KEY,
`name` VARCHAR(100) NOT NULL,
`email` VARCHAR(255) UNIQUE NOT NULL,
`password_hash` VARCHAR(255) NOT NULL,
`avatar` VARCHAR(500) NULL,
`department` VARCHAR(100) NOT NULL,
`role` ENUM('user', 'developer', 'admin') DEFAULT 'user',
`join_date` DATE NOT NULL,
`total_likes` INT DEFAULT 0,
`total_views` INT DEFAULT 0,
`is_active` BOOLEAN DEFAULT TRUE,
`last_login` TIMESTAMP NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
### API 端點詳情
#### POST /api/auth/login
```json
{
"email": "user@example.com",
"password": "password123"
}
```
**回應:**
```json
{
"success": true,
"user": {
"id": "uuid",
"name": "用戶名稱",
"email": "user@example.com",
"role": "user",
"department": "ITBU",
// ... 其他用戶資訊(不包含密碼)
}
}
```
#### POST /api/auth/register
```json
{
"name": "用戶名稱",
"email": "user@example.com",
"password": "password123",
"department": "ITBU",
"role": "user" // 可選,預設為 "user"
}
```
#### PUT /api/auth/profile
```json
{
"userId": "user-uuid",
"name": "新名稱",
"department": "新部門"
// ... 其他可更新欄位
}
```
## 🚀 使用方法
### 1. 啟動開發服務器
```bash
pnpm run dev
```
### 2. 創建測試用戶(可選)
```bash
pnpm run create:users
```
### 3. 測試資料庫連接
```bash
pnpm run test:db
```
### 4. 測試認證功能
```bash
node scripts/test-db-auth.js
```
## 🔐 安全特性
1. **密碼加密**:使用 bcryptjs 進行安全的密碼雜湊
2. **SQL 注入防護**:使用參數化查詢
3. **重複註冊防護**:檢查電子郵件唯一性
4. **輸入驗證**API 端點包含完整的輸入驗證
5. **錯誤處理**:統一的錯誤回應格式
## 📝 注意事項
1. **環境變數**:確保 `.env.local` 包含正確的資料庫連接資訊
2. **密碼強度**:建議使用更強的密碼策略
3. **會話管理**:目前使用 localStorage生產環境建議使用 JWT 或 session
4. **權限控制**:角色權限檢查在前端實現,後端需要額外的中間件
## 🎉 整合完成
用戶認證系統已成功從 `localStorage` 遷移到 MySQL 資料庫所有測試帳號已創建API 端點正常運作。您現在可以使用任何測試帳號登入系統進行測試!