
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
解决步骤
- 临时解决方案(已验证有效):将
web容器镜像版本降级至 1.14.2,其余容器(API、Worker 等)保持 1.15.0 版本。此方案无数据迁移风险,仅影响前端展示逻辑。- 在
docker-compose.yaml中找到web服务定义,将镜像标签从langgenius/dify-web:1.15.0修改为langgenius/dify-web:1.14.2。 - 运行
docker compose up -d web重新启动前端容器。 - 验证匿名用户是否可以正常访问公开链接。
- 在
- 永久解决方案:此 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)



