通过API使用明确的用户ID创建用户

你好,我一直在使用 Discourse API 和 OAuth2 插件,将用户从我的 SSO 服务迁移并登录到私有的 Discourse 安装中。目前,我已经成功通过程序化方式将所有 SSO 用户迁移到了 Discourse。在程序化迁移过程中,新用户会被分配一个自动递增的 Discourse 特定 ID。

我的问题是:是否可以通过 API 创建用户时指定明确的 ID?也就是说,如果我将某个用户分配为 ID:22,我是否可以通过 /admin/users/22.json 查询到该用户?

我尝试在 POST 请求体中传递 idexternal_id 参数,但未能成功。

编辑:另外,是否可以通过 API,根据指定的用户 ID 修改其用户名?

谢谢。

您无法分配该 ID。

存在一个外部 ID 路由:

    get "#{root_path}/by-external/:external_id" => "users#show", constraints: { external_id: /[^\/]+/ }

如果您启用了站点设置 sso_overrides_username(我想这是可行的),则无需通过 API 更改用户名。

谢谢,但在用户创建时我并没有 external_id。用户是程序化创建的,只有当用户登录 Discourse 后,才会与外部 SSO 建立关联。除非在用户迁移过程中有办法程序化地将用户与该 external_id 关联,否则我认为无法使用 external_id。

这些用户是否需要关联到 Discourse 中已有的数据?您为什么要创建这些用户?

我需要将大量现有用户从我的 SSO 迁移到 Discourse。这些用户可能永远不会直接登录 Discourse,但应能够通过 Discourse API 向他们发送消息或检索他们的通知。因此,需要主动通过程序创建这些用户。此外,用户可以在 SSO 上更改用户名,因此,给定一个 ID,我也需要能够更新 Discourse 中相应用户的用户名。

是我开启了一个新话题,还是其他内容被意外删除了?

看起来 SSO 应该拥有该账户,并知晓一个外部 ID,你可以利用该 ID 创建用户记录,并在将来使用它。但如果这确实无法实现,你可以尝试通过电子邮件地址查找用户——你甚至可以创建一个虚假的备用邮箱地址(以防他们更改真实邮箱),然后设法将其隐藏起来,以便将来将其用作标识符。