ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LibreChat 在 DocumentDB 5.0 以下静默建不了唯一索引(OAuth 唯一性失效)怎么发现和处理?

LibreChat 在 DocumentDB 5.0 以下静默建不了唯一索引(OAuth 唯一性失效)怎么发现和处理? LibreChat 在 DocumentDB 5.0 以下静默建不了唯一索引OAuth 唯一性失效怎么发现和处理【免费下载链接】LibreChatEnhanced ChatGPT Clone: Features Agents, MCP, Skills, DeepSeek, Anthropic, AWS, OpenAI, Responses API, Azure, Groq, o1, GPT-5, Mistral, OpenRouter, Vertex AI, Gemini, Artifacts, AI model switching, message search, Code Interpreter, langchain, DALL-E-3, OpenAPI Actions, Functions, Secure Multi-User Auth, Presets, open-source for self-hosting. Active项目地址: https://gitcode.com/GitHub_Trending/li/LibreChat如果你的 LibreChat 部署把MONGO_URI指向 Amazon DocumentDB 3.6 或 4.0 的实例集群会遇到一个没有任何报错的问题用户表上用于保证 OAuth 账号唯一的唯一索引partial unique index根本没建成功同一个googleId、openidId等字段可以重复插入OAuth 登录的唯一性约束在数据库层面静默失效。本文基于仓库内 DocumentDB 兼容性评估文档 给出的结论说明如何在部署中确认这个状态以及文档给出的处理路径升级到 DocumentDB 5.0 实例集群或按 4.0 的降级说明运行。为什么索引构建失败会是静默的先弄清机制后面所有发现手段都基于它LibreChat 的用户模型在 user.ts 中为每个 OAuth ID 字段googleId、facebookId、openidId、samlId、ldapId、githubId、discordId、appleId各建了一个唯一索引都带partialFilterExpression: { field: { $exists: true } }openidId的索引是{ openidId, openidIssuer, tenantId }复合键。AWS 文档说明 partial index 特性只在 DocumentDB 5.0 实例集群开始支持3.6/4.0/elastic 上构建必然失败。实测mongoose 8 autoIndex对预置重复数据建唯一索引表明失败完全静默没有 unhandled rejection没有日志索引就是不存在重复插入照常成功。原因是 Mongoose 只有通过Model.on(index)监听器才会把索引构建错误抛出来而项目里此前没有挂任何监听器。代码修复位置在 models/index.tscreateModels现在给每个模型挂index监听器构建失败时输出错误日志。除用户表外仓库中受同类问题影响的其他唯一 partial 索引还有 file.tsexecute_code文件$eq形状过滤器和 group.tsidOnTheSource。发现三种确认手段1. 查启动日志当前版本最快的判断方式createModels的监听器在索引构建失败时输出固定格式的日志Index build failed for model: error.message应用启动索引自动构建阶段后如果日志里出现Index build failed for User就说明 OAuth 唯一性没有落到数据库上。反之旧版本部署里没有任何痕迹本身就是症状——这正是文档中 provably silent 的含义。2. 确认重复插入是否成功文档描述的失败模式是索引不存在duplicate inserts succeed。如果你的 4.0 集群上能写入两条googleIdtenantId相同、但_id不同的用户记录且第二条不被拒绝唯一性就处于未强制状态。这是运行时现象层面的佐证不是文档给出的正式验证命令。3. 跑仓库内的 live 能力探测套件确定性判断compat.documentdb.spec.ts 会对一个真实DocumentDB 集群执行偏置索引构建探测partialFilterExpression: { googleId: { $exists: true } }的唯一索引把结果记入能力矩阵测试结束后打印DocumentDB capability matrix (run runId): partial unique indexes supported # 或 partial unique indexes REJECTED (server error)运行方式命令来自该文件头部注释在packages/data-schemas目录下执行DOCUMENTDB_URI未设置时套件整体跳过DOCUMENTDB_URImongodb://user:pass127.0.0.1:27017/librechat_compat?tlstrueretryWritesfalseauthSourceadminauthMechanismSCRAM-SHA-1directConnectiontrue \ DOCUMENTDB_TLS_CA_FILEglobal-bundle.pem \ npx jest --config misc/documentdb/jest.documentdb.config.mjs使用前必须知道的事user:pass、127.0.0.1:27017隧道端点和global-bundle.pem都要替换为你自己的账号密码、集群隧道地址和 AWS CA 证书文件副作用套件会向DOCUMENTDB_URI指定的数据库写入探测集合、用户/标签/文件记录并在afterAll中清理还会drop探测集合。文档明确要求指向一个DEDICATED database不要指向生产业务库通过 SSH 隧道连接时另加DOCUMENTDB_TLS_ALLOW_INVALID_HOSTNAMEStrue因为隧道端点不会匹配集群证书authSourceadmin、authMechanismSCRAM-SHA-1DocumentDB 拒绝 SCRAM-SHA-256报Unsupported mechanism [ -301 ]、directConnectiontrue副本集发现返回的集群内部主机名经隧道不可达三项都是对真实集群的硬要求集群在 VPC 内外部访问需要隧道/堡垒机。另外文档明确不存在忠实的本地模拟器——documentdb-localDocker 镜像是基于 PostgreSQL 的另一个引擎本地 MongoDB含 mongodb-memory-server都会接受这些操作无法代替对真实集群的验证。处理按引擎版本选择路径文档给出的支持矩阵引自 documentdb-compat.md能力LibreChat 依赖3.64.05.08.0Elastic唯一索引✓✓✓✓✗Partial 唯一索引OAuth id✗✗✓✓✗事务运行时探测✗✓✓✓✗对应的处理路径升级推荐路径文档的建议是支持DocumentDB 5.0 实例集群这是该仓库支持并实际验证过的目标reference 部署跑在 5.0.0 上live 探测确认 partial unique indexes 在该版本 accepted。本项目的 OAuth 索引用的是$exists/$eq过滤形状都在 5.0 支持的partialFilterExpression算子列表内升级后索引可以正常构建不需要改应用代码。留在 4.0文档的定性是 works, with a documented caveat——系统能跑但 OAuth 账号唯一性不是数据库强制的这一点documented, loud有日志but not fixable in application code即应用代码无法补救只能靠启动日志的Index build failed提醒。Elastic 集群直接不支持full stop。它连普通唯一索引都不支持email tenantId唯一索引这一条就足以排除 elastic。同时检查MONGO_URIconnect.js 原样透传MONGO_URI而 DocumentDB 不支持可重试写入因此retryWritesfalse是MONGO_URI中的强制项缺失时失败形态是{ok:0,errmsg:Unrecognized field: txnNumber,code:9}。compat 套件 里有一个专门的检查会标记MISSING — DocumentDB rejects retryable writes。升级后的验证重跑上文的能力探测套件并对 5.0 目标加上硬断言开关DOCUMENTDB_EXPECT_PARTIAL_INDEXEStrue \ # 配合上一条命令的 DOCUMENTDB_URI / DOCUMENTDB_TLS_CA_FILE\ npx jest --config misc/documentdb/jest.documentdb.config.mjs该环境变量把 partial-index 探测从信息性记录变成断言5.0 上必须输出supported才通过。结束时的能力矩阵即本次验证记录。启动日志中不再有Index build failed for User条目。文档建议的节奏发版前、以及data-schemas中 update-operator 代码有变更时都对真实集群跑一次该套件也可以用 sweep.documentdb.spec.ts 驱动全部 contenteditable="false">【免费下载链接】LibreChatEnhanced ChatGPT Clone: Features Agents, MCP, Skills, DeepSeek, Anthropic, AWS, OpenAI, Responses API, Azure, Groq, o1, GPT-5, Mistral, OpenRouter, Vertex AI, Gemini, Artifacts, AI model switching, message search, Code Interpreter, langchain, DALL-E-3, OpenAPI Actions, Functions, Secure Multi-User Auth, Presets, open-source for self-hosting. Active项目地址: https://gitcode.com/GitHub_Trending/li/LibreChat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表