如何通过用户ID链接到用户个人资料?

我在应用程序的数据库中有一个 members 表,用于存储部分成员的应用特定信息。其中一列是 discourse_user_id。我想渲染一个链接指向该成员在 Discourse 的个人资料页面。仅凭用户 ID 是否可以实现这一点?

我没有存储 discourse_user_name,因为用户可能会更改用户名,那样我就得担心如何保持同步。

我能想到的唯一方法是向 /admin/users/<user-id>.json 发起 API 请求以获取其用户名,但在索引页面上列出成员并链接到其个人资料时,这样做会产生大量请求。

另一个想法是编写一个插件来添加路由,但这似乎有些大材小用,毕竟我预期自己不会是第一个提出这个问题的人。因此,我想确认一下是否已有其他解决方案?

一个想法是在用户记录中放置一个外部 ID,然后你可以使用 /by-external/:external_id。另一个方法是使用 webhook 通知你的外部数据库,以便在用户名变更时进行同步。还有一种方法是直接禁止修改用户名。快速查看 discourse/config/routes.rb 后,我没有发现任何使用 user_id 的路由。

感谢 @pfaffman,这非常有帮助。我认为使用外部 ID 是最佳方案,因为它还能解决另一个问题——反向链接

不过,我在查阅 API 文档和使用 REST 客户端时,没找到如何更新该字段的方法。我能否在不启用 SSO 的情况下使用它?(而且,即使启用了 SSO,我能否通过程序方式更新它?)

抱歉,我一时想不起来。我需要查看源代码才能确定。

没有必要更新外部密钥,密钥本就不应发生变化。

你还可以让两个系统都依赖电子邮件地址保持一致。

我猜你最终会想要实现单点登录(SSO)。

您可以尝试以下地址:

https://SERVER/community/admin/users/list/active.json?filter=email%40hostname.com&show_emails=true

您需要按照其他文档所述,在请求头中传递 API 密钥。

我创建了一个插件来实现这个功能:

/user-by-id/123/summary 会重定向到 /u/janedoe/summary 等等。

我仍然惊讶于不得不这么做,但至少它有效!