From 0d53dfe00b3fc1b94d8d89570d42c509944266b9 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 4 Jun 2026 14:38:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20StreamResponse=E5=AF=BC=E8=87=B4ticket?= =?UTF-8?q?=E4=B8=8D=E7=BB=AD=E6=9C=9F=EF=BC=8C=E7=94=A8=E6=88=B7=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E4=B8=AD=E8=A2=AB=E8=B8=A2=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit aiohttp_auth的process_response检查isinstance(response, web.Response), 但ahserver的dspy处理器返回StreamResponse,导致reissue逻辑永远不执行。 在checkAuth middleware中手动触发ticket reissue,确保活跃用户不会被踢出。 --- ahserver/auth_api.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ahserver/auth_api.py b/ahserver/auth_api.py index 29bcf8d..24cd1ab 100644 --- a/ahserver/auth_api.py +++ b/ahserver/auth_api.py @@ -176,6 +176,12 @@ class AuthAPI: t3 = time.time() if t3 - t1 > 1.0: debug(f'timecost=client({ip}) {user} access {path} cost {t3-t1:.3f}, ({t2-t1:.3f})') + # Reissue ticket if needed (fix for StreamResponse not triggering process_response) + from aiohttp_auth.auth.ticket_auth import _REISSUE_KEY + if _REISSUE_KEY in request: + policy = request.get('aiohttp_auth.policy') + if policy and hasattr(policy, 'remember_ticket'): + await policy.remember_ticket(request, request[_REISSUE_KEY]) return ret except Exception as e: t3 = time.time()