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 此端点验证当前会话的 Cookie Authorization header
然后返回一个临时 token 用于 WebSocket 握手认证 然后返回一个临时 token 用于 WebSocket 握手认证
临时 token 有效期 60 且只能使用一次 临时 token 有效期 60 且只能使用一次
注意在未认证时返回 200 状态码但 success=False避免前端因 401 刷新页面
""" """
# 获取当前 session token # 获取当前 session token
session_token = None session_token = None
@ -94,12 +96,17 @@ async def get_ws_token(
session_token = authorization.replace("Bearer ", "") session_token = authorization.replace("Bearer ", "")
if not session_token: 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 # 验证 session token
token_manager = get_token_manager() token_manager = get_token_manager()
if not token_manager.verify_token(session_token): 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 # 生成临时 WebSocket token
ws_token = generate_ws_token(session_token) ws_token = generate_ws_token(session_token)