我正在将 Discourse 用作身份提供者 用于我的 Rails 应用程序(您登录我的 Rails 应用,而不是反之)。我想在 Discourse 的用户个人资料页面上添加一个链接,以指向他们在我的 Rails 应用中的相应个人资料。为了做到这一点,Discourse 需要知道他们在我的 Rails 应用/数据库中的用户 ID。
我知道 DiscourseConnect 在 反向 操作时会保存“external_id”(使用其他登录名登录 Discourse)。但以这种方式操作时,它会保存任何东西吗?
如果没有,有什么存储它的建议吗?
1 个赞
david
(David Taylor)
2
它不能,所以你需要一些自定义的东西。
我想知道是否可以在你的 Rails 应用中处理这个问题,因为它知道用户的 Discourse ID?
你可以设置一个像 /profile-by-discourse-id/:discourse_id 这样的路由,它根据 Discourse ID 查找相关用户,然后重定向到 Rails 应用中的用户个人资料。
1 个赞
感谢 @david。有趣的是,这正是我在另一个方向(从我的 Rails 应用用户配置文件链接到 Discourse 用户配置文件)通过这个 Discourse 插件 (/user-by-id/123/summary) 所做的,因为我的 Rails 应用存储的是 Discourse 用户 ID 而不是用户名(因为用户名可能会更改)。
该解决方案在另一个方向上是可行的,但有一个事实是并非所有的论坛用户在我的 Rails 应用中都有用户配置文件。只有当 Discourse 用户“加入”组织时,才会创建一个 Rails 用户,而 Discourse 论坛可以包含非成员。
所以我想我的两个选择是:
A) 创建一个 JavaScript 插件,向我的 Rails 应用发送一个 ajax 请求,以确定 Discourse 用户是否也是 Rails 应用中的用户,如果是,则渲染一个链接;或者
B) 在创建 Rails 应用用户并链接到 Discourse 用户时,除了在 Rails 应用数据库中存储 Discourse 用户 ID 外,还要以某种方式将 Rails 用户 ID 存储在 Discourse 用户配置文件中(例如,作为自定义用户字段)。
我认为 (B) 是更好的解决方案(前提是自定义用户字段不能被除管理员以外的人更改),尽管我对自定义字段不熟悉,也不知道是否可以通过 API 访问它们。
编辑:我现在想起来了,上次我研究这个问题的时候:问题在于自定义用户字段可以被用户编辑,这使得它们不适合存储像这样的系统生成的引用:/