使用 wp-discourse 在单个 WordPress 上运行多个 Discourse 站点

我有一个客户有一个处理订阅的WordPress网站,以及一个与wp-discourse连接的论坛。一切都很好。

但现在他想添加额外的Discourse站点,这些站点都针对单个WordPress站点进行身份验证。我尝试将第一个Discourse站点的设置复制到第二个站点,但WordPress会重定向到第一个Discourse站点。然后我想到也许可以让第一个Discourse站点成为第二个站点的discourse_connect服务器,但这仍然不起作用(它也会重定向到第一个Discourse站点,而第二个站点没有登录)。

有没有办法让一个WordPress站点为多个Discourse站点提供身份验证?

2 个赞

如果您计划为两个以上的平台使用单一登录(SSO),那么最正确的解决方案是使用 keycloak
这种方法很好,因为我们不必考虑单一登录服务器以及通过社交网络(以及其他)进行更简单的登录。
您可以添加和删除任何站点而不会丢失用户。

WP Discourse插件不支持此功能,但应该是可行的。

我建议在Discourse的discourse_connect_url设置中添加一个site URL参数。在WordPress中,使用site参数在此处设置正确的Discourse站点以重定向:

您可能还需要处理此处发生的sync_sso调用:wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub

我不确定,但您可能需要在该函数中将site添加到允许的查询变量中(这样WordPress就不会删除该参数):wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub

理想情况下,上述更改可以通过WordPress上的actionfilter钩子来完成。看起来需要向代码添加钩子来实现这一点。

我假设这不涉及将帖子从WordPress发布到多个Discourse站点。如果是这种情况,所需的更改将稍微复杂一些。

如果我想起其他问题,我会告诉您。

编辑:需要考虑WordPress如何使用Discourse用户ID,以确保多个站点之间不会发生冲突 - WordPress上的单个用户可能在多个WordPress站点上拥有帐户。他们将在每个站点上拥有不同的Discourse用户ID。

编辑:我能看到的最大的问题是,如果WordPress站点上启用了“登录时创建或同步Discourse用户”设置。它会向Discourse的sync_sso路由发出API调用。您需要知道要同步或创建用户的Discourse站点。您还需要每个站点都有一个Discourse API密钥。这似乎是可行的,但会增加一些复杂性。

3 个赞

这听起来有点可能。是的,他不在乎发帖,只在乎身份验证,以及,我想,从 WooCommerce 或类似平台推送群组。

我猜想这意味着在用户在 WordPress 网站上购物时,调整他们在特定 Discourse 网站上的用户组会员资格。这听起来是可行的,但最好通过 API 请求 sync_sso 路由来完成。WP Discourse 插件具有可用于此目的的功能,但它们使用的是插件选项页面上设置的 Discourse URL 和 API 密钥:https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L278-L326。也许该插件可以为这些参数添加过滤器钩子,以便可以有条件地设置它们。

3 个赞

我们正在探索类似的设置,因此我也对解决方案感兴趣。

1 个赞

我认为他没有回复我是否想为发展而比赛(我怀疑是因为他忙于其他事情)。

如果你有预算,那可能会有帮助。

这仍然是探索性的,所以我没有具体的预算。但我可以提供一些开发人员支持和一点资金。如果您的客户也愿意出资,那么我们可以一起筹集一些资金。

1 个赞