大家好,
这是我的情况。我试图在 talk.example.com 上运行 Discourse 安装,同时在 www.example.com 上维护一个网站。我希望当有人登录 Discourse 站点时,他们也会在 www 站点上显示为已登录状态。如果他们在 Discourse 站点登出,他们也会从 www 站点登出。我阅读了很多相关主题,常见的答案似乎是使用 SSO。但我不认为这在当前情况下可行,原因如下。
www.example.com 上的网站是一个使用 Hugo 构建的静态网站。对于不了解它的人,可以把它想象成 Jekyll。因此,它没有任何数据库或后端。它不是一个“应用”。我基本上希望 Discourse 成为这个静态网站的伪后端。如果他们在 Discourse 上有未读通知,我希望能够通过静态网站向他们展示。
我能想到的唯一方法是通过 Discourse 的 Cookie,但这些 Cookie 不包含子域名,而据我目前的调研,Discourse 不支持这一点。
有什么建议吗?
Falco
(Falco)
2
这是一个有趣的挑战。
如果网站是带有后端的动态网站,并且你在 Discourse 和该网站之间实现了单点登录(SSO),那么这将有一条清晰的前进路径。你的后端可以知道用户是谁,并使用管理员 API 密钥查询当前用户的 Discourse 通知,并在每次请求时将通知随页面一起发送。
由于该网站是静态页面,它目前实际上并没有登录状态,对吧?
我们可以使用以下两个方案,它们都适用于静态网站:
我认为为通知功能开发一个新的方案是个很棒的主意!
没错。它只是 HTML、CSS 和典型的前端 JavaScript。
在理想情况下,我希望能够在静态站点上使用在浏览器中运行的 JavaScript,从 Discourse 拉取数据。
通知就是一个例子,为此提供一个嵌入组件会非常棒。
另一个例子,我希望能让 Discourse 上的用户填写一个用户字段。然后在静态站点上,能够访问该用户字段,从而通过 JavaScript 改变内容的渲染方式。例如,重新排序内容以适应用户的个性化需求。
我知道这可能会是一个不受支持的“黑客”做法,但有没有办法修改 Discourse 设置会话 Cookie 的方式,使其不包含子域名,并且能够经受住后续更新的考验?