1.15.0: Public WebApp link (/chat/{code}) redirects anonymous users to /signin instead of using passport flow

用户通过 Docker Compose 部署了 Dify 1.15.0 版本(从 1.14.2 升级)。任何使用 Dify "分享公共链接"功能创建的应用,当匿名用户(无浏览器 Cookie)访问公开的 /chat/{code} 路径时,不会显示聊天界面,而是被强制跳转到 /signin 登录页。

1.15.0: Public WebApp link (/chat/{code}) redirects anonymous users to /signin instead of using passport flow

1.15.0: Public WebApp link (/chat/{code}) redirects anonymous users to /signin instead of using passport flow

快速结论:此问题发生在 Dify 1.15.0 版本的公共 WebApp 链接(通过 /chat/{code} 分享)上。匿名用户访问此类链接时,本应触发/api/passport流程以获取终端用户令牌,但由于前端路由守卫逻辑错误,直接重定向到登录页面。优先排查web容器版本是否为 1.15.0,并可通过降级web容器至 1.14.2 立即恢复访问。

问题场景

用户通过 Docker Compose 部署了 Dify 1.15.0 版本(从 1.14.2 升级)。任何使用 Dify “分享公共链接”功能创建的应用,当匿名用户(无浏览器 Cookie)访问公开的/chat/{code}路径时,不会显示聊天界面,而是被强制跳转到/signin登录页。

报错原文

Nginx access log:
GET  /chat/PaqSCJfpAsRlq1V1                        → 200 (page shell)
POST /console/api/refresh-token                    → 401 "No refresh token provided"
GET  /console/api/account/profile                  → 401 "Invalid Authorization token."
GET  /signin                                       → 200  ← redirected here

Response body from POST /console/api/refresh-token:
{ "message": "No refresh token provided", "result": "fail" }

Response body from GET /console/api/account/profile:
{ "code": "unauthorized", "message": "Invalid Authorization token.", "status": 401 }

原因分析

这是一个已确认的 Bug。根因位于前端代码文件 web/hooks/use-timestamp.ts 中。该文件中的 useTimestamp() 钩子调用了 userProfileQueryOptions(),后者会请求 /console/api/account/profile 接口。

当公开的 WebApp 页面(如 /chat/{token})通过 ChatWithHistoryWrap → useChat() → useTimestamp() → userProfileQueryOptions() 链路渲染时,会无意中触发这个控制台(console)的用户信息请求。由于匿名用户没有控制台会话,该请求返回 401,而前端的路由守卫将这次 401 视为”必须登录”,没有回退到 /api/passport 流程,直接重定向到了 /signin

此问题很可能与 1.15.0 版本中前端认证管道/路由守卫的重构有关,涉及以下 PR:

  • #36818 – refactor(web): remove app initializer and move auth boot logic to route boundaries
  • #36870 – fix(web): prefetch workspace and guard routes with contract query
  • #36693 – feat(openapi): redesign auth pipeline with per-token-type routing
  • #36931 – fix(api): enforce workspace membership + role checks in auth pipeline

新的路由边界认证启动逻辑被错误地应用到了公开的 WebApp 路由(如 /chat/*)上,而没有跳过它们。

环境排查

  • Dify 版本:1.15.0(或更高版本,直至问题修复的补丁发布前)
  • 部署方式:Self Hosted (Docker / Docker Compose),官方 docker/docker-compose.yaml
  • 前端容器镜像版本:dify-web:1.15.0

解决步骤

  1. 临时解决方案(已验证有效):web 容器镜像版本降级至 1.14.2,其余容器(API、Worker 等)保持 1.15.0 版本。此方案无数据迁移风险,仅影响前端展示逻辑。
    1. docker-compose.yaml 中找到 web 服务定义,将镜像标签从 langgenius/dify-web:1.15.0 修改为 langgenius/dify-web:1.14.2
    2. 运行 docker compose up -d web 重新启动前端容器。
    3. 验证匿名用户是否可以正常访问公开链接。
  2. 永久解决方案:此 Bug 的修复已合并在 PR #37915 中,预计会包含在下一个补丁版本(1.15.1 或类似版本)中。请关注 Dify 官方发布说明,升级后即可解决。

验证方法

在无痕/隐私窗口中打开任意一个通过 Dify 分享的公共 WebApp 链接(如 https://your-dify-domain/chat/{code})。如果能够直接显示聊天 UI,而不会被重定向到登录页面,则问题已解决。

参考来源

langgenius/dify #38111 (原始 Issue,包含核心讨论和修复 PR 链接)

langgenius/dify #38043 (重复 Issue,维护者进行了详细的根因分析)

langgenius/dify #37915 (修复该 Bug 的 Pull Request)

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 10306

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注