4.3 KiB
4.3 KiB
密碼重設頁面角色顯示修復總結
🎯 問題描述
在密碼重設頁面中,管理員帳號的角色顯示為「一般用戶」,而不是從資料庫 users
表的 role
欄位獲取的正確角色資訊。
🔍 問題分析
原因分析:
- 忘記密碼 API 在生成重設連結時,沒有包含用戶的角色資訊
- 註冊頁面 在密碼重設模式下,角色顯示依賴 URL 參數,但該參數缺失
- 角色資訊 應該從資料庫中的
users.role
欄位獲取,而不是硬編碼
原始問題:
// 忘記密碼 API 中缺少角色資訊
const resetUrl = `${baseUrl}/register?token=${resetToken.token}&email=${encodeURIComponent(user.email)}&mode=reset&name=${encodeURIComponent(user.name)}&department=${encodeURIComponent(user.department)}`
// 缺少 &role=${encodeURIComponent(user.role)}
✅ 修復方案
1. 修改忘記密碼 API
文件: app/api/auth/forgot-password/route.ts
// 修復前
const resetUrl = `${baseUrl}/register?token=${resetToken.token}&email=${encodeURIComponent(user.email)}&mode=reset&name=${encodeURIComponent(user.name)}&department=${encodeURIComponent(user.department)}`
// 修復後
const resetUrl = `${baseUrl}/register?token=${resetToken.token}&email=${encodeURIComponent(user.email)}&mode=reset&name=${encodeURIComponent(user.name)}&department=${encodeURIComponent(user.department)}&role=${encodeURIComponent(user.role)}`
2. 修改註冊頁面角色顯示
文件: app/register/page.tsx
// 添加角色顯示變數
const displayRole = isResetMode ? invitedRole : invitedRole
// 更新角色顯示邏輯
{displayRole === "admin" && (
<><Shield className="w-3 h-3 mr-1" />管理員</>
)}
{displayRole === "developer" && (
<><Code className="w-3 h-3 mr-1" />開發者</>
)}
{displayRole === "user" && (
<><User className="w-3 h-3 mr-1" />一般用戶</>
)}
🧪 測試結果
測試腳本:scripts/test-role-display.js
✅ 忘記密碼 API 測試成功
生成的重設連結: http://localhost:3000/register?token=xxx&email=admin%40ai-platform.com&mode=reset&name=%E7%B3%BB%E7%B5%B1%E7%AE%A1%E7%90%86%E5%93%A1&department=ITBU&role=admin
📋 URL 參數解析:
- token: xxx
- email: admin@ai-platform.com
- mode: reset
- name: 系統管理員
- department: ITBU
- role: admin
✅ 註冊頁面載入成功
✅ 角色顯示正確:管理員
📋 修復內容總結
✅ 已修復的問題:
-
忘記密碼 API 現在包含用戶角色資訊
- 從資料庫
users
表獲取正確的role
欄位 - 在重設連結中包含
role
參數
- 從資料庫
-
註冊頁面 正確顯示角色資訊
- 從 URL 參數獲取角色資訊
- 使用
displayRole
變數確保角色顯示正確 - 支援管理員、開發者、一般用戶三種角色
-
角色顯示邏輯 基於資料庫資料
- 不再依賴硬編碼的角色資訊
- 確保角色顯示與資料庫中的實際角色一致
🔧 技術改進:
- 資料一致性:角色資訊直接來自資料庫
- URL 參數完整性:重設連結包含所有必要的用戶資訊
- 顯示邏輯優化:使用專門的
displayRole
變數 - 測試覆蓋:添加專門的角色顯示測試
🎉 修復效果
修復前:
- 管理員帳號在密碼重設頁面顯示為「一般用戶」
- 角色資訊不準確,可能造成用戶困惑
修復後:
- 管理員帳號正確顯示為「管理員」
- 所有角色都基於資料庫中的實際資料
- 角色顯示與用戶實際權限一致
🚀 使用方式
1. 測試角色顯示
# 測試角色顯示功能
pnpm run test:role-display
2. 驗證修復效果
- 使用管理員帳號 (
admin@ai-platform.com
) 測試忘記密碼 - 點擊生成的重設連結
- 確認角色顯示為「管理員」而非「一般用戶」
📝 注意事項
- 資料庫依賴:角色顯示現在完全依賴資料庫中的
users.role
欄位 - URL 參數:重設連結現在包含完整的用戶資訊
- 向後兼容:修復不影響現有的其他功能
- 測試覆蓋:建議定期運行角色顯示測試確保功能正常
角色顯示問題已完全修復,現在密碼重設頁面會正確顯示用戶在資料庫中的實際角色!