尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Memos 后台修改 SSO 或实例设置报 FailedPrecondition 怎么处理?

Memos 后台修改 SSO 或实例设置报 FailedPrecondition 怎么处理? Memos 后台修改 SSO 或实例设置报 FailedPrecondition 怎么处理【免费下载链接】memosOpen-source, self-hosted note-taking tool built for quick capture. Markdown-native, lightweight, and fully yours.项目地址: https://gitcode.com/GitHub_Trending/me/memos在 Memos 管理后台里管理员新建、修改或删除 SSO身份提供方OAuth2 Identity Provider或某组实例设置instance setting时API 返回codes.FailedPrecondition前端把该错误原样呈现。这通常说明目标资源是部署配置deployment configuration管理的对应资源文件挂载在/etc/secrets下被启动时加载的运行时快照影子覆盖shadow了数据库里的同键配置UI 和 API 的写操作会被守卫拒绝。处理路径只有一条确认资源是否由文件托管然后去改部署文件并重启进程而不是在后台继续重试。先判断 FailedPrecondition 属于哪一种后台写操作返回FailedPrecondition有两种来源错误信息不同处理方向也不同。来源一资源由部署文件托管身份提供方服务 和 实例设置服务 中被文件托管的资源返回的固定错误是identity provider primary-sso is configured by the deployment instance setting GENERAL is configured by the deployment引号内是实际的 IdP UID 或设置 key上面的值仅为文档示例。会触发该错误的写操作包括操作结果用文件已占用的 UID 创建存储型 IdPFailedPrecondition更新文件托管的 IdPFailedPrecondition删除文件托管的 IdPFailedPrecondition更新文件托管的实例设置组带 field mask 的任意字段更新都会被拒FailedPrecondition实例设置的守卫在字段校验和 field-mask 应用之前就执行所以对文件托管组做任何字段更新都会被拒绝。未被文件覆盖的其他 IdP 和设置组不受影响可以继续正常修改。来源二认证安全不变量不涉及部署文件即使没有部署文件两类操作也可能返回FailedPrecondition删除最后一个有效 IdP而当前状态是普通用户密码登录已禁用且存在有效 IdP的安全状态——删除会使密码登录在无 IdP 的情况下被关闭被DeleteIdentityProviderSafely拒绝更新GENERAL组把安全认证状态改成禁用普通用户密码登录且没有有效 IdP的状态。遇到这种错误信息时解决方式是恢复安全状态在GENERAL设置中重新允许普通用户密码登录或确保至少配置了一个 IdP。确认哪些资源被文件托管Memos 启动时扫描/etc/secrets目录的直接子文件不递归按文件名模式识别资源文件名模式对应消息稳定键memos-idp-label.jsonmemos.store.IdentityProvider消息内的uidmemos-instance-setting-label.jsonmemos.store.InstanceSetting消息内的keylabel为小写 kebab-case匹配[a-z0-9](?:-[a-z0-9])*扩展名固定为小写.json。文件名里的 label 只是描述性的真正决定覆盖关系的是文件消息里的uid或key——所以先对照报错信息里的 UID / key到/etc/secrets里找哪个文件声明了同一个值。例如报identity provider primary-sso is configured by the deployment就检查memos-idp-primary-sso.json或任何消息内uid为primary-sso的memos-idp-*.json。每个匹配文件必须满足是期望消息的合法 protobuf JSON、不含未知字段、不超过 1 MiB、恰好包含一个资源。目录不存在或没有匹配文件是正常的空操作任何匹配文件不可读或校验失败都会直接导致启动失败不会发布部分配置。启动日志会打印按资源类型统计的匹配文件数且文件名拼错时以memos-开头但不匹配支持的模式会产生告警——如果后台明明报错但/etc/secrets里找不到对应文件先看启动日志里的这段统计和告警。修复步骤文件托管的资源改部署文件并重启这是唯一被支持的修改路径API 的任何操作都不会写入挂载的文件也没有写回机制编辑/etc/secrets下对应的 JSON 文件。例如 IdP 文件的完整结构id必须省略uid必填且为稳定键{ uid: primary-sso, name: Company SSO, type: OAUTH2, identifierFilter: , config: { oauth2Config: { clientId: client-id, clientSecret: client-secret, authUrl: https://idp.example.com/oauth/authorize, tokenUrl: https://idp.example.com/oauth/token, userInfoUrl: https://idp.example.com/oauth/userinfo, scopes: [openid, profile, email], fieldMapping: { identifier: sub, displayName: name, email: email, avatarUrl: picture } } } }以上为文档中的示例值clientId、clientSecret、各 URL 等需替换为你的 IdP 实际值。初始校验只支持 OAuth2 提供方且要求非空 UID 与显示名、Client ID 与 Client Secret、授权/token/userinfo 三个 URL、至少一个非空 scope、fieldMapping中 identifier 字段非空。实例设置组文件同理例如ACCESS组必须显式选择模式{ key: ACCESS, accessSetting: { accessMode: INSTANCE_ACCESS_MODE_PRIVATE } }ACCESS只接受INSTANCE_ACCESS_MODE_PRIVATE或INSTANCE_ACCESS_MODE_PUBLIC消息内填充的oneof必须与key匹配否则启动失败。重启 Memos 进程。快照在进程启动时加载一次运行中修改文件不生效文件变更后必须重启才会发布新快照。验证重启成功启动日志中能看到按类型的匹配文件数后重新执行之前失败的后台操作。如果你本意是以后允许在后台管理这个资源则删除对应文件并重启——删除文件只移除运行时覆盖不会删除或修改数据库里的存储型资源被覆盖的存储值随即恢复生效此时该组/该 IdP 的后台写操作不再返回FailedPrecondition。需要特别注意的完整组替换语义实例设置文件是整组覆盖文件没有显式写出的标量字段会取 protobuf 默认值不会继承数据库里的旧值。例如STORAGE组在解码字段缺省时按应用默认回退为本地存储、30 MiB 上传上限、assets/{timestamp}_{uuid}_{filename}。文件中的空 secret 字段就是空值永远不会表示保留数据库里的旧密钥——UI 更新路径上的凭据保留行为不适用于部署配置。改文件前建议把需要保留的字段完整写进文件。从旧版数据库 bootstrap 迁移过来的额外检查早期版本会把memos-idp-*.json里的 IdP含 client secret复制到idp表。新加载器不会自动清理这些行当文件覆盖了同 UID 的存储型提供方时启动日志会打印一条不含密钥的告警提示仍有存储副本残留。残留的旧配置在文件被删除后会重新出现。文档给出的清理步骤需要先备份数据库并保留管理员密码登录备份数据库保留管理员密码访问临时移除 IdP 文件并重启使存储型提供方不再被覆盖通过管理 UI、API 或等价的离线数据库维护删除或更新该存储型提供方恢复文件并再次重启。清理完成前旧的存储型提供方和密钥仍留在数据库里。限制与多副本说明所有副本必须挂载相同的文件集合滚动升级期间新旧配置代可能短暂并存涉及认证或存储配置变更时部署策略应确保不会把流量路由到挂载不同文件代次的副本上。前端拿不到配置来源元数据始终展示常规编辑控件并上报 API 的FailedPreconditionAPI 是写操作执行与否的唯一权威。不支持项不监听文件变化、不热加载配置、第一版不支持多个配置源之间的优先级规则、不支持实例设置组内的部分字段归属。文件与/etc/secrets目录应视为敏感明文建议只允许属主或应用组读取API 响应仍会对 client secret、SMTP 密码、S3 密钥和 AI API key 做脱敏。判断是否处理完成的标准很简单报错的资源不再来自/etc/secrets文件或已被你按上节步骤移除文件并重启之后对同一资源的后台修改要么按新文件内容生效、要么恢复为对数据库存储值的正常读写而不再返回FailedPrecondition。设计细节与完整验证矩阵见 docs/configuration-provisioning.md。【免费下载链接】memosOpen-source, self-hosted note-taking tool built for quick capture. Markdown-native, lightweight, and fully yours.项目地址: https://gitcode.com/GitHub_Trending/me/memos创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表