144 lines
3.7 KiB
Markdown
144 lines
3.7 KiB
Markdown
# 用戶認證系統整合總結
|
||
|
||
## 🎯 完成的工作
|
||
|
||
### 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 端點正常運作。您現在可以使用任何測試帳號登入系統進行測試!
|