[Bug] Desktop 2.2.5 (Windows, Cloud): sign-in loop — /api/auth/get-session returns null while OIDC bearer token is valid → bounces to “Sign

Windows (Windows 11) 上的 LobeChat Desktop 客户端(Electron),使用官方 LobeHub Cloud 云服务( storageMode: cloud ),在自动从 v2.2.3 更新到 v2.2.4/2.2.5 后出现。macOS 用户也有类似报告。

[Bug] Desktop 2.2.5 (Windows, Cloud): sign-in loop — /api/auth/get-session returns null while OIDC bearer token is valid → bounces to "Sign

[Bug] Desktop 2.2.5 (Windows, Cloud): sign-in loop — /api/auth/get-session returns null while OIDC bearer token is valid → bounces to “Sign in to sync”

快速结论:LobeChat Desktop 2.2.4/2.2.5 在 Cloud 账号上出现无限登录循环。问题是在 OIDC bearer token 仍然有效的情况下,渲染进程依赖 Better-Auth 的 /api/auth/get-session 接口返回 null,导致路由守卫误判用户为未登录。优先尝试降级回 v2.2.3 或升级到 v2.2.6-canary.4+。

问题场景

Windows (Windows 11) 上的 LobeChat Desktop 客户端(Electron),使用官方 LobeHub Cloud 云服务(storageMode: cloud),在自动从 v2.2.3 更新到 v2.2.4/2.2.5 后出现。macOS 用户也有类似报告。

报错原文

# 来自远程调试的网络请求:
GET https://app.lobehub.com/api/auth/get-session → HTTP 200 with body `null`  # NextAuth session 为空
GET https://app.lobehub.com/trpc/lambda/user.getUserState → HTTP 200 with full account  # tRPC 凭证令牌正常

# 控制台/主进程日志(正常部分):
AuthCtr: Token is valid, starting auto-refresh timer

# 用户看到的是 UI 无限循环:
"Sign in to sync across devices / Authorization Successful" → 点击 "Get Started" → Dashboard 闪一下 → 跳回 "Sign in to sync"

原因分析

这是 Desktop 客户端 auth 机制的“分裂”(split-brain)问题。具体原因如下:

  • OIDC bearer token(通过 OAuth 获取)有效且正常工作:tRPC 调用 user.getUserState 返回完整的用户账户。
  • 但 LobeChat 渲染进程的 isLogin 状态是从 Better-Auth 的 useSession() 派生的,该函数调用 /api/auth/get-session(NextAuth 端点)。
  • 在桌面环境下,该端点返回 null,导致 isSignedIn = false,路由守卫强制跳转回登录页面 /desktop-onboarding?screen=login
  • 还有一个状态持久化时序问题:在 goToNextStep 函数的异步间隙中(window.location.replace.finally() 块内),一个 React effect 将 "login" 写回 localStorage 的 lobechat:desktop:onboarding:screen:v1 键。每次重启时,这个过时的键会触发重定向循环。

环境排查

  • LobeChat Desktop 版本:2.2.4 或 2.2.5(v2.2.3 不受影响,v2.2.6-canary.4+ 已修复)。
  • 操作系统:Windows 11(已报告),macOS(已报告)。
  • 存储模式:storageMode: cloud(云账号)。

解决步骤

  1. 优先尝试(已确认修复): 升级到 Desktop Canary v2.2.6-canary.4 或更高版本。此版本已解决了 /api/auth/get-session 返回 null 导致的登录循环问题。
  2. 降级为临时方案: 将 Desktop 回滚到 v2.2.3。该版本将登录判定基于 bearer token,不会出现分裂问题。
  3. 注意: 硬重启或重新安装 2.2.5 版本无法解决此问题。

验证方法

升级到 v2.2.6-canary.4+ 或降级到 v2.2.3 后,启动 Desktop 客户端并:

  1. 使用 Cloud 账号完成 OAuth 登录。
  2. 确认“Authorization Successful”页面后,点击“Get Started”会正常进入 Dashboard,而不会跳回登录页面。
  3. 可以在 Dashboard 中正常使用聊天功能,表示 login 状态已正确同步。

参考来源

lobehub/lobe-chat #15931

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 8483

发表回复

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