我在应用程序的数据库中有一个 members 表,用于存储部分成员的应用特定信息。其中一列是 discourse_user_id。我想渲染一个链接指向该成员在 Discourse 的个人资料页面。仅凭用户 ID 是否可以实现这一点?
我没有存储 discourse_user_name,因为用户可能会更改用户名,那样我就得担心如何保持同步。
我能想到的唯一方法是向 /admin/users/<user-id>.json 发起 API 请求以获取其用户名,但在索引页面上列出成员并链接到其个人资料时,这样做会产生大量请求。
另一个想法是编写一个插件来添加路由,但这似乎有些大材小用,毕竟我预期自己不会是第一个提出这个问题的人。因此,我想确认一下是否已有其他解决方案?
pfaffman
(Jay Pfaffman)
2
一个想法是在用户记录中放置一个外部 ID,然后你可以使用 /by-external/:external_id。另一个方法是使用 webhook 通知你的外部数据库,以便在用户名变更时进行同步。还有一种方法是直接禁止修改用户名。快速查看 discourse/config/routes.rb 后,我没有发现任何使用 user_id 的路由。
感谢 @pfaffman,这非常有帮助。我认为使用外部 ID 是最佳方案,因为它还能解决另一个问题——反向链接。
不过,我在查阅 API 文档和使用 REST 客户端时,没找到如何更新该字段的方法。我能否在不启用 SSO 的情况下使用它?(而且,即使启用了 SSO,我能否通过程序方式更新它?)
pfaffman
(Jay Pfaffman)
5
您可以尝试以下地址:
https://SERVER/community/admin/users/list/active.json?filter=email%40hostname.com&show_emails=true
您需要按照其他文档所述,在请求头中传递 API 密钥。
我创建了一个插件来实现这个功能:
/user-by-id/123/summary 会重定向到 /u/janedoe/summary 等等。
我仍然惊讶于不得不这么做,但至少它有效!