vagosduke
(Vagelis Duke)
1
你好,我一直在使用 Discourse API 和 OAuth2 插件,将用户从我的 SSO 服务迁移并登录到私有的 Discourse 安装中。目前,我已经成功通过程序化方式将所有 SSO 用户迁移到了 Discourse。在程序化迁移过程中,新用户会被分配一个自动递增的 Discourse 特定 ID。
我的问题是:是否可以通过 API 创建用户时指定明确的 ID?也就是说,如果我将某个用户分配为 ID:22,我是否可以通过 /admin/users/22.json 查询到该用户?
我尝试在 POST 请求体中传递 id 和 external_id 参数,但未能成功。
编辑:另外,是否可以通过 API,根据指定的用户 ID 修改其用户名?
谢谢。
pfaffman
(Jay Pfaffman)
2
您无法分配该 ID。
存在一个外部 ID 路由:
get "#{root_path}/by-external/:external_id" => "users#show", constraints: { external_id: /[^\/]+/ }
如果您启用了站点设置 sso_overrides_username(我想这是可行的),则无需通过 API 更改用户名。
vagosduke
(Vagelis Duke)
3
谢谢,但在用户创建时我并没有 external_id。用户是程序化创建的,只有当用户登录 Discourse 后,才会与外部 SSO 建立关联。除非在用户迁移过程中有办法程序化地将用户与该 external_id 关联,否则我认为无法使用 external_id。
pfaffman
(Jay Pfaffman)
4
这些用户是否需要关联到 Discourse 中已有的数据?您为什么要创建这些用户?
vagosduke
(Vagelis Duke)
5
我需要将大量现有用户从我的 SSO 迁移到 Discourse。这些用户可能永远不会直接登录 Discourse,但应能够通过 Discourse API 向他们发送消息或检索他们的通知。因此,需要主动通过程序创建这些用户。此外,用户可以在 SSO 上更改用户名,因此,给定一个 ID,我也需要能够更新 Discourse 中相应用户的用户名。
pfaffman
(Jay Pfaffman)
6
是我开启了一个新话题,还是其他内容被意外删除了?
看起来 SSO 应该拥有该账户,并知晓一个外部 ID,你可以利用该 ID 创建用户记录,并在将来使用它。但如果这确实无法实现,你可以尝试通过电子邮件地址查找用户——你甚至可以创建一个虚假的备用邮箱地址(以防他们更改真实邮箱),然后设法将其隐藏起来,以便将来将其用作标识符。