与 Discourse 用户在 SPA 上协作

我正在尝试一种方法,以便从 Discourse 在 SPA 中获取用户特定的数据。

大致设置:
SPA 运行在 my-app.com
Discourse 运行在 community.my-app.com

SPA 没有自己的用户管理,我希望使用 Discourse 来管理(因为我们没有其他需要自己用户管理的用户特定内容)。

但是,我想在 SPA 中显示 Discourse 当前登录的用户,以及显示一个未读主题的小部件(这是用户特定的),因此我需要通过 API 从 Discourse 加载数据。

我尝试过的事情:

有没有可能实现我想要的行为?

此致
Marcel

1 个赞

这会奏效吗?

  1. 使用 DiscourseConnect(“Discourse SSO”)按描述获取当前用户的用户名。
  2. 创建一个具有所需范围和“所有用户”访问权限的 API 密钥。
  3. 显然,您不能在不危及网站安全的情况下将该密钥传递给客户端的 Web 应用程序,因此您需要将 Web 应用程序的请求通过该应用程序的后端代理到您的 Discourse 实例。(您还需要从后端验证用户名的合法性——我还没有研究 DiscourseConnect,但假设有一种方法可以做到这一点。)

(附注:我建议使用“example.com”作为您的示例域名。有人可能会购买您链接的那个域名并设置垃圾邮件或恶意软件等,而 example.[com|org|net] 是官方保留的。)

1 个赞

是的,这实际上是我现在实现它的方式。

通过 SSO 发送用户,中间件创建一个简单的用户,包含姓名、电子邮件和令牌数组,创建一个令牌,然后将其传回 SPA。

中间件使用所有用户 API 密钥代理请求到 discourse,并验证“会话令牌”(以查看是哪个用户)以及一些其他安全措施。

为了让用户保持登录状态,我将使用 cookie / 本地存储,并通过 discourse 的注销直接选项同步注销。

它确实有效,但我仍然认为应该有比使用管理员 API 令牌和用户名组合更好的方法。如果某个管理员更改了某人的用户名,它就会失效……我想要一个哈希 ID 或类似的东西……但这是我无法改变的,所以我将接受它 :wink:

感谢您的回答。

2 个赞