From 74053bdbdcc6455ab0725accd87508e10f5a1bc4 Mon Sep 17 00:00:00 2001 From: canglan Date: Tue, 14 Apr 2026 14:48:49 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=A8=E5=9F=9Fbug=E4=BF=AE=E5=A4=8D1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../changes/fix-admin-multi-issues/task.md | 20 +++++++++++++++++++ backend/middleware/auth_middleware.py | 13 +++++++++++- frontend/admin/conduct.php | 2 +- frontend/admin/homework.php | 2 +- frontend/assets/js/admin.js | 10 +++++----- 5 files changed, 39 insertions(+), 8 deletions(-) diff --git a/.cospec/plan/changes/fix-admin-multi-issues/task.md b/.cospec/plan/changes/fix-admin-multi-issues/task.md index 4ff78dd..fcbae3b 100644 --- a/.cospec/plan/changes/fix-admin-multi-issues/task.md +++ b/.cospec/plan/changes/fix-admin-multi-issues/task.md @@ -202,3 +202,23 @@ - 在 `clearAuth()` 调用后、路径检查之前,添加 `fetch('/api/clear_session.php', { method: 'POST', headers: { 'Content-Type': 'application/json' } })` 调用 - 使用 try-catch 包裹,失败时仅输出 console.warn 警告,不阻塞后续重定向逻辑 - `/api/clear_session.php` 是同源路径(由 Nginx 直接处理,不经过后端 FastAPI),不需要 Authorization header,也不会触发跨域问题 + +### 阶段 9:修复 500 响应 CORS 头丢失 + admin.js 变量重复声明 + +- [x] 9.1 修复 500 响应 CORS 头丢失 + 【目标对象】`backend/middleware/auth_middleware.py` + 【修改目的】当路由层抛出异常导致 500 时,BaseHTTPMiddleware 的 call_next 返回的 500 响应不会经过 CORSMiddleware,导致 CORS 头缺失。浏览器报告"CORS Missing Allow Origin",前端无法读取错误信息。 + 【修改方式】在 dispatch 方法中将 `return await call_next(request)` 改为 try-except 包裹,确保所有响应都有 CORS 头 + 【修改内容】 + - 用 try-except 包裹 `call_next(request)` 调用 + - 在 try 中获取 response 后检查是否已有 CORS 头,若无则补充 + - 在 except 中捕获路由层异常,返回带 CORS 头的 500 响应 + +- [x] 9.2 修复 admin.js selectedStudentIds 重复声明 + 【目标对象】`frontend/assets/js/admin.js`、`frontend/admin/conduct.php`、`frontend/admin/homework.php` + 【修改目的】admin.js 通过 footer.php 在所有 admin 页面加载,其 `let selectedStudentIds = []` 与 conduct.php 和 homework.php 页面级 `