![[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](https://www.chat-gpts.plus/wp-content/uploads/2026/06/15931-43eff339.jpg)
[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(云账号)。
解决步骤
- 优先尝试(已确认修复): 升级到 Desktop Canary v2.2.6-canary.4 或更高版本。此版本已解决了
/api/auth/get-session返回null导致的登录循环问题。 - 降级为临时方案: 将 Desktop 回滚到 v2.2.3。该版本将登录判定基于 bearer token,不会出现分裂问题。
- 注意: 硬重启或重新安装 2.2.5 版本无法解决此问题。
验证方法
升级到 v2.2.6-canary.4+ 或降级到 v2.2.3 后,启动 Desktop 客户端并:
- 使用 Cloud 账号完成 OAuth 登录。
- 确认“Authorization Successful”页面后,点击“Get Started”会正常进入 Dashboard,而不会跳回登录页面。
- 可以在 Dashboard 中正常使用聊天功能,表示 login 状态已正确同步。



