3.7 KiB
3.7 KiB
用戶認證系統整合總結
🎯 完成的工作
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 個字符
資料庫結構
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
{
"email": "user@example.com",
"password": "password123"
}
回應:
{
"success": true,
"user": {
"id": "uuid",
"name": "用戶名稱",
"email": "user@example.com",
"role": "user",
"department": "ITBU",
// ... 其他用戶資訊(不包含密碼)
}
}
POST /api/auth/register
{
"name": "用戶名稱",
"email": "user@example.com",
"password": "password123",
"department": "ITBU",
"role": "user" // 可選,預設為 "user"
}
PUT /api/auth/profile
{
"userId": "user-uuid",
"name": "新名稱",
"department": "新部門"
// ... 其他可更新欄位
}
🚀 使用方法
1. 啟動開發服務器
pnpm run dev
2. 創建測試用戶(可選)
pnpm run create:users
3. 測試資料庫連接
pnpm run test:db
4. 測試認證功能
node scripts/test-db-auth.js
🔐 安全特性
- 密碼加密:使用 bcryptjs 進行安全的密碼雜湊
- SQL 注入防護:使用參數化查詢
- 重複註冊防護:檢查電子郵件唯一性
- 輸入驗證:API 端點包含完整的輸入驗證
- 錯誤處理:統一的錯誤回應格式
📝 注意事項
- 環境變數:確保
.env.local
包含正確的資料庫連接資訊 - 密碼強度:建議使用更強的密碼策略
- 會話管理:目前使用 localStorage,生產環境建議使用 JWT 或 session
- 權限控制:角色權限檢查在前端實現,後端需要額外的中間件
🎉 整合完成
用戶認證系統已成功從 localStorage
遷移到 MySQL 資料庫,所有測試帳號已創建,API 端點正常運作。您現在可以使用任何測試帳號登入系統進行測試!