修正多租戶 Cookie 隔離與郵件查看功能

## 主要修正

1. **Cookie 隔離機制** (多租戶支援)
   - 改用租戶專屬 Cookie: `webmail_session_{tenant_code}`
   - 設定 Cookie path 為 `/{tenant_code}` 確保隔離
   - 解決兩個租戶共用 Cookie 導致互相覆蓋的問題

2. **郵件查看 API 修正**
   - 修正路由定義: `{{mail_id}}` → `{mail_id}` (FastAPI 路由語法錯誤)
   - 修正函數呼叫: `get_mail_detail` → `get_mail_by_id`

3. **Session 讀取機制更新**
   - Callback: 設定租戶專屬 Cookie
   - Inbox/Compose/API: 從 `request.cookies.get(f"webmail_session_{tenant_code}")` 讀取
   - 移除對 SessionMiddleware 的依賴 (改用手動 Cookie 管理)

4. **PKCE 錯誤訊息優化**
   - 增加 PKCE 驗證失敗的詳細錯誤訊息
   - 提示可能的失敗原因 (過期、舊連結、Redis 連線)

## 測試狀態
-  修正路由與函數呼叫錯誤
-  實作租戶專屬 Cookie 機制
- 🔧 待測試:兩個租戶同時登入不互相干擾

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
porsche5130
2026-03-04 04:35:28 +08:00
parent 0dd8ae21e9
commit e1c2ea46f3
3 changed files with 2441 additions and 265 deletions

View File

@@ -13,12 +13,19 @@ set REDIS_PASSWORD=DC1qaz2wsx
set REDIS_DB=2 set REDIS_DB=2
set DATABASE_URL=postgresql://admin:DC1qaz2wsx@10.1.0.20:5433/virtual_mis set DATABASE_URL=postgresql://admin:DC1qaz2wsx@10.1.0.20:5433/virtual_mis
set KEYCLOAK_SERVER_URL=https://auth.lab.taipei set KEYCLOAK_SERVER_URL=https://auth.lab.taipei
set MAIL_SERVER=10.1.0.254
set SMTP_SERVER=10.1.0.254
echo Starting Uvicorn on port 8100... echo Starting Uvicorn on port 8100...
echo. echo.
echo Environment Variables:
echo MAIL_SERVER=%MAIL_SERVER%
echo SMTP_SERVER=%SMTP_SERVER%
echo REDIS_HOST=%REDIS_HOST%
echo.
echo Access URL: http://10.1.0.245:8100 echo Access URL: http://10.1.0.245:8100
echo. echo.
echo Press Ctrl+C to stop the server echo Press Ctrl+C to stop the server
echo. echo.
uvicorn app:app --host 0.0.0.0 --port 8100 --reload python -m uvicorn app:app --host 0.0.0.0 --port 8100 --reload

2675
app.py

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,11 @@
fastapi==0.115.0 fastapi>=0.115.0
uvicorn[standard]==0.32.0 uvicorn[standard]>=0.32.0
authlib==1.3.2 authlib>=1.3.2
itsdangerous==2.2.0 itsdangerous>=2.2.0
redis==5.2.0 redis>=5.2.0
httpx==0.27.2 httpx>=0.27.2
python-multipart==0.0.12 python-multipart>=0.0.12
sqlalchemy==2.0.23 sqlalchemy>=2.0.23
psycopg2-binary==2.9.9 psycopg2-binary>=2.9.10
imap-tools==1.7.1 imap-tools>=1.7.1
requests==2.31.0 requests>=2.31.0