bug:修复前端认证错误处理401导致无法登录的问题

修改 get_ws_token 的行为:当认证缺失或已过期时,返回 HTTP 200 且 success=False,而不是 401。这样可以避免用户停留在登录页面时,前端因收到 401 而不必要地刷新页面。
pull/1440/head
陈曦 2025-12-14 21:27:04 +08:00
parent c3c5bc337d
commit debc39bacf
1 changed files with 9 additions and 2 deletions

View File

@ -85,6 +85,8 @@ async def get_ws_token(
此端点验证当前会话的 Cookie Authorization header
然后返回一个临时 token 用于 WebSocket 握手认证
临时 token 有效期 60 且只能使用一次
注意在未认证时返回 200 状态码但 success=False避免前端因 401 刷新页面
"""
# 获取当前 session token
session_token = None
@ -94,12 +96,17 @@ async def get_ws_token(
session_token = authorization.replace("Bearer ", "")
if not session_token:
raise HTTPException(status_code=401, detail="未提供认证信息")
# 返回 200 但 success=False避免前端因 401 刷新页面
# 这在登录页面是正常情况,不应该触发错误处理
logger.debug("ws-token 请求:未提供认证信息(可能在登录页面)")
return {"success": False, "message": "未提供认证信息,请先登录", "token": None, "expires_in": 0}
# 验证 session token
token_manager = get_token_manager()
if not token_manager.verify_token(session_token):
raise HTTPException(status_code=401, detail="认证已过期,请重新登录")
# 同样返回 200 但 success=False避免前端刷新
logger.debug("ws-token 请求:认证已过期")
return {"success": False, "message": "认证已过期,请重新登录", "token": None, "expires_in": 0}
# 生成临时 WebSocket token
ws_token = generate_ws_token(session_token)