快速结论:这个报错出现在 LobeHub Desktop(Electron)里修改账号邮箱时,桌面端的 Better Auth 客户端把请求发到了跨域的云端地址,被 CORS 预检拦截,从而抛出 TypeError: Failed to fetch;同一操作在网页版正常,优先排查桌面端是否为受影响版本,并改用浏览器打开网页版完成改邮箱。
适用环境:LobeHub Desktop 2.2.16;macOS 27.0;Official Cloud(https://app.lobehub.com);桌面端内置 Electron 浏览器(origin 为 app://renderer)。Issue 未提供其他 Python、CUDA、PyTorch 或依赖版本信息。
最快修复方案:暂无确认的一步修复方案。Issue 中已验证可用的替代做法是:在桌面端进入 Settings → Profile → Update Email,此时会打开浏览器里的网页版 /settings/profile,在该页面完成邮箱修改(网页端改邮箱正常工作)。针对桌面端本身跨域请求的修复已在 PR #19298 中提供(客户端改为同源 /api/auth/* 请求,由主进程后端代理转发),需要升级到包含该修复的版本后才生效。
注意事项:Issue 确认桌面端使用 OIDC 登录,该会话并未桥接到 Better Auth 会话(与 #15931 同一处缺口),因此即使 CORS 修复后,桌面端内的改邮箱流程仍可能无法走完,官方暂时决定不做桥接,改邮箱被引导到浏览器网页端完成。Console 中 /api/auth/list-accounts 的 401 与此相关,但个体环境中是否为同一原因仍需自行确认。
问题场景
用户在 macOS 上使用 LobeHub Desktop 2.2.16,以 Official Cloud(https://app.lobehub.com)方式登录后,打开 Settings → Account / Profile(路径 app://renderer/settings/profile),编辑邮箱字段并点击 Save,输入框下方出现 Failed to fetch,邮箱修改失败。同样的改邮箱操作在官方网页版中可以正常完成。用户在桌面端 DevTools Console 中看到 change-email 请求在 CORS 预检阶段被拦截。
报错原文
Access to fetch at 'https://app.lobehub.com/api/auth/change-email'
from origin 'app://renderer' has been blocked by CORS policy:
Request header field content-type is not allowed by
Access-Control-Allow-Headers in preflight response.
Failed to load resource: net::ERR_FAILED
Failed to change email: TypeError: Failed to fetch
原因分析
已确认的原因:桌面端 Better Auth 客户端把云端远程地址作为 baseURL,于是 changeEmail 从 app://renderer 跨域请求 https://app.lobehub.com/api/auth/change-email。桌面端 setupCORSBypass 虽然设置了 Access-Control-Allow-Headers: *,但通配符不满足带凭据(credentialed)预检对 content-type 的要求,预检被拒,请求失败并抛出 TypeError: Failed to fetch。修复后的客户端改为发出同源 /api/auth/* 请求,由主进程后端代理转发并注入 Oidc-Auth。
另一层相关但独立的原因:桌面端通过 OIDC 认证,该会话未桥接到 Better Auth 会话(与 #15931 同一缺口),这也是 Console 中出现 /api/auth/list-accounts 401 的原因,并且是 CORS 修复后流程仍无法在桌面端内走完的原因。
环境排查
- 确认 LobeHub Desktop 版本是否为 2.2.16(或是否包含 PR #19298 的修复)。
- 确认操作系统为 macOS(Issue 中为 macOS 27.0)。
- 确认登录方式为 Official Cloud(https://app.lobehub.com)而非自建/本地部署。
- 打开 View → Developer Tools → Console,确认是否出现
Request header field content-type is not allowed的 CORS 预检报错。 - 确认 Console 中是否同时出现
/api/auth/list-accounts的401。 - 对比同一账号在网页版 https://app.lobehub.com 上改邮箱是否正常。
解决步骤
- 在桌面端 Console 中确认报错为
Failed to fetch且伴随content-type is not allowed by Access-Control-Allow-Headers的 CORS 预检拒绝,与本文描述一致。 - 用同一账号在浏览器打开 https://app.lobehub.com,进入
/settings/profile完成邮箱修改,作为立即可用的替代方案。 - 在桌面端 2.2.16 上,可直接使用 Settings → Profile → Update Email,该入口会打开浏览器网页版的
/settings/profile完成改邮箱。 - 检查是否有包含 PR #19298 修复的桌面版本可用;该修复将客户端改为同源
/api/auth/*请求,由主进程代理转发,可解决所报的 CORS 失败。注意这属于 Issue 中说明的已合入修复,是否已进入你安装的版本需以实际发布为准。 - 若你同时看到
/api/auth/list-accounts的401,不要期望仅靠 CORS 修复就能在桌面端内完整走完改邮箱流程,OIDC 会话与 Better Auth 会话的桥接目前官方暂不处理。
验证方法
在浏览器网页版 /settings/profile 修改邮箱,确认不再出现 Failed to fetch,且邮箱变更/验证流程可正常发起。若升级到包含 PR #19298 的桌面版本,重新在桌面端改邮箱,观察 Console 中是否仍有针对 content-type 的 CORS 预检拒绝,并确认请求已变为同源 /api/auth/*。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![🐛 [Bot] Feishu reactions API rejects Unicode emoji: every status-reaction swap fails with 231001](https://www.chat-gpts.plus/wp-content/uploads/2026/09/18551-11679141-768x403.jpg)

