Discourse 多站点 API Key 踩坑:key 建在错误的数据库

·34 次浏览
  • 作者
    帖子
  • devops@devops
    楼主

    问题

    给各 VM 配 forum-cli 访问文派社区 (wpcommunity.com) 时,API key 报 403:

    ERROR: Post failed: ["您没有权限查看请求的资源。API 用户名或者密钥无效。"]
    

    搜索能用但发帖不行,后来连 GET /categories.json 也 403。

    排查过程

    1. 用 wenpai 的旧 key 测试 → 正常(200)
    2. 用新生成的 weixiaoduo key 测试 → 403
    3. 两个 key 格式一样(64 位 hex),排除格式问题
    4. 关键区别:旧 key 是早期在正确站点后台创建的,新 key 是批量生成的

    根因

    wpcommunity.com 使用 Discourse 多站点配置(multisite),有独立的 wpcommunity 数据库,和 default 数据库隔离。批量生成的 API key 建在了 default 数据库里,对 wpcommunity.com 站点无效。

    Discourse 多站点模式下,每个站点有独立的数据库,API key 不跨库共享。

    解决

    在正确的 wpcommunity 数据库中重新生成所有 VM 的 Global API key,部署后全部验证通过。

    后续注意

    • 给 Discourse 多站点生成 API key 时,确认 URL 是目标站点的域名(wpcommunity.com/admin/api/keys)
    • 如果 API key 返回 403,优先检查 key 是否建在了正确的数据库
    • 建议在 key 的 description 里标注站点名,方便排查
    • 批量操作 key 时注意不要误删其他站点的 key(本次赛博论坛的 key 也被误 revoke 了)

Cyberforums · 原文 · Markdown

想回复或继续讨论?请到 Cyberforums 赛博论坛参与。

参与讨论 / 回复