From bd856e988fe6768379511a52c07a9b27dee5ce43 Mon Sep 17 00:00:00 2001 From: npc0-hue Date: Wed, 25 Feb 2026 17:08:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dweb=20app=20=E4=BC=9A?= =?UTF-8?q?=E8=AF=9D=E5=B7=A5=E4=BD=9C=E6=B5=81=20404=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BC=9A=E8=AF=9D=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../kubernetes/web/gva-web-configmap.yaml | 1 + admin/server/corn/main.go | 4 +- .../web/.docker-compose/nginx/conf.d/my.conf | 1 + api/services/conversation_service.py | 49 +++++++++++++++++-- 4 files changed, 48 insertions(+), 7 deletions(-) diff --git a/admin/deploy/kubernetes/web/gva-web-configmap.yaml b/admin/deploy/kubernetes/web/gva-web-configmap.yaml index 189b8617e..60b640bee 100644 --- a/admin/deploy/kubernetes/web/gva-web-configmap.yaml +++ b/admin/deploy/kubernetes/web/gva-web-configmap.yaml @@ -7,6 +7,7 @@ data: server { listen 8080; server_name localhost; + absolute_redirect off; #charset koi8-r; #access_log logs/host.access.log main; diff --git a/admin/server/corn/main.go b/admin/server/corn/main.go index 10d87d773..5781151d3 100644 --- a/admin/server/corn/main.go +++ b/admin/server/corn/main.go @@ -44,8 +44,8 @@ func Corn() { } global.GVA_LOG.Info("【定时任务-每1分钟执行1次】同步用户列表任务,已启动!") - // 每10分钟同步一次【应用使用分析数据】 - if _, err := c.AddFunc("0 */10 * * * *", func() { + // 一天同步一次~待改目前没啥用【应用使用分析数据】 + if _, err := c.AddFunc("0 0 1 * * *", func() { if global.GVA_DB == nil { global.GVA_LOG.Info("【定时任务-每6分钟执行1次】同步应用使用分析数据任务,数据库没有初始化,暂未开始同步") return diff --git a/admin/web/.docker-compose/nginx/conf.d/my.conf b/admin/web/.docker-compose/nginx/conf.d/my.conf index c8568011e..498e8ec33 100644 --- a/admin/web/.docker-compose/nginx/conf.d/my.conf +++ b/admin/web/.docker-compose/nginx/conf.d/my.conf @@ -1,6 +1,7 @@ server { listen 8081; server_name localhost; + absolute_redirect off; # 使用相对重定向,避免暴露后端端口导致浏览器跳转到 :8080 #charset koi8-r; #access_log logs/host.access.log main; diff --git a/api/services/conversation_service.py b/api/services/conversation_service.py index 295d48d8a..3fd3e0a5a 100644 --- a/api/services/conversation_service.py +++ b/api/services/conversation_service.py @@ -48,12 +48,29 @@ class ConversationService: if not user: return InfiniteScrollPagination(data=[], limit=limit, has_more=False) + if isinstance(user, EndUser): + from_source = "api" + # Include conversations owned by this end_user or by this end_user's linked account (Web login). + user_filter: Any = Conversation.from_end_user_id == user.id + if getattr(user, "external_user_id", None): + user_filter = or_(user_filter, Conversation.from_account_id == user.external_user_id) + base_conditions = ( + Conversation.is_deleted == False, + Conversation.app_id == app_model.id, + Conversation.from_source == from_source, + user_filter, + ) + else: + base_conditions = ( + Conversation.is_deleted == False, + Conversation.app_id == app_model.id, + Conversation.from_source == "console", + Conversation.from_end_user_id.is_(None), + Conversation.from_account_id == user.id, + ) + stmt = select(Conversation).where( - Conversation.is_deleted == False, - Conversation.app_id == app_model.id, - Conversation.from_source == ("api" if isinstance(user, EndUser) else "console"), - Conversation.from_end_user_id == (user.id if isinstance(user, EndUser) else None), - Conversation.from_account_id == (user.id if isinstance(user, Account) else None), + *base_conditions, or_(Conversation.invoke_from.is_(None), Conversation.invoke_from == invoke_from.value), ) # Check if include_ids is not None to apply filter @@ -173,6 +190,28 @@ class ConversationService: .first() ) + # extend start: 二开部分End - web app 会话列表,兼容 cookie 和 header 登录 + # Web App: fallback when conversation was created with same end_user but lookup fails + # (e.g. cookie vs header passport, or session refresh). Allow access when either + # from_end_user_id matches or from_account_id matches end_user's linked account. + if not conversation and isinstance(user, EndUser): + fallback = ( + db.session.query(Conversation) + .where( + Conversation.id == conversation_id, + Conversation.app_id == app_model.id, + Conversation.from_source == "api", + Conversation.is_deleted == False, + ) + .first() + ) + if fallback and ( + fallback.from_end_user_id == user.id + or (getattr(user, "external_user_id", None) and fallback.from_account_id == user.external_user_id) + ): + conversation = fallback + # extend end: 二开部分End - web app 会话列表,兼容 cookie 和 header 登录 + if not conversation: raise ConversationNotExistsError()