SSO:无法登出

我需要一些建议。:slight_smile:

我们使用 WordPress 作为 SSO 提供商(我们使用 MemberPress 在 WordPress 上管理对 Discourse 和 LMS 内容的访问)。新用户注册和登录功能运行完美——但我似乎无法登出。

我已经添加了 ?request=logout 重定向,但一旦刷新登出页面,我立刻又回到了登录状态。

起初我以为这可能是因为我同时在另一个浏览器标签页中打开了 WordPress,但即使在我退出 WordPress 并关闭该标签页后,这个问题依然存在。

感觉我们离成功真的只差一步了。希望有人愿意分享一些故障排除建议,让我们能彻底解决这个问题。

谢谢。

这是一个演示连续两次登出失败的小动图:

以下是我在 WordPress 中的 SSO 设置截图:

以及 Discourse 中的设置截图:

看起来您的配置都已正确设置。这是一个常规的 WordPress 站点,还是多站点(multisite)设置的一部分?在网络中,除主站点外的其他站点在同步登出时可能会出现一些问题。

从您的屏幕录像来看,您的 Discourse 站点似乎已设置为“需要登录”。目前的情况是,Discourse 会将您重定向到 WordPress 站点并发起 SSO 请求,然后由于您仍登录在 WordPress 上,系统会自动为您登录。预期的行为是,您应以已登出用户的身份被引导至 WordPress 登录页面。

与 Discourse 同步登出功能依赖于 WordPress 的 clear_auth_cookie 钩子。可能是您站点上的另一个插件对此造成了干扰。

谢谢,Simon。这是一个单一的 WordPress 站点,使用 cookie 似乎是合理的。我会从这方面着手调查。

感谢建议!

brian driggs //// tgp

如果您有一个开发站点,请尝试禁用除 WP Discourse 之外的所有插件,然后查看问题是否仍然存在。如果您没有开发站点,可以尝试使用 Health Check 插件 在用户会话期间停用插件。有关如何使用该插件在会话中停用插件的详细信息,请参见此处:Troubleshooting using the Health Check – Make WordPress Support

搞定。我虽然没有开发站点,但健康检查插件一次就完美运行——甚至还是第一次尝试。看来我得深入研究一下 MemberPress 和 auth_cookie 了。谢谢你,Simon。

以下是我采取的步骤,以防其他人需要参考:

  1. 安装了健康检查插件。
    – 将站点置于故障排查模式。
    – 启用了 WP-Discourse 插件。
  2. 打开 Discourse 站点。
    – 退出登录。
    – 被重定向到 WordPress 登录页面(登录表单缺失)。
    – 完全无法重新登录 Discourse。(这正是期望的功能。)
  3. 启用 MemberPress。
    – (我意识到登录页面使用的是 MemberPress 生成的用户名/密码字段。)
    – 登录表单重新出现。
  4. 打开 Discourse 站点,发现已经处于登录状态。
  5. 尝试退出登录,却被重定向循环回到 Discourse 站点,仍然处于登录状态。

我从 2007 年就开始使用 WordPress,但直到现在才听说过这个插件。再次感谢,Simon!

是的,它在故障排查方面非常有用。

我想检查一下 MemberPress 的情况,但这是一个付费插件。查看他们的文档后,似乎可以在插件的设置页面中配置一个“MemberPress 登出重定向 URL”。问题可能与该设置有关。

我能如何提供帮助?

我注意到了登出重定向设置并设置了一些目标,但似乎没有任何效果。

我正在尝试寻找一种从外部站点登出 Discourse 的方法。我查阅了相关文档,似乎实现方式是按照这篇帖子中提到的,发送一个 API POST 请求。

问题是,我不太清楚如何发起 API 请求,也不知道接下来该怎么做。我已经下载了 Postman 并尝试在其中进行实验,但进展困难。我不确定如何构造所需的 API 请求,也不清楚之后如何在外部站点上实现它。

关于如何解决这个问题,有什么建议吗?

如果你能提供关于你外部网站的一些详细信息,这里的某人或许能提供帮助。

该网站是一个使用 Memberpress 的 WordPress 站点,同时作为 Discourse 论坛的 SSO 提供商。当用户在 WordPress 上注销后,我可以将他们重定向到一个 URL,我希望借此同时实现从 Discourse 注销。或者,我是否可以通过在 functions.php 中添加一个 PHP 函数来发送 API 请求?

您是否使用了 WP Discourse 插件进行 SSO?如果是,从 WordPress 注销应该也会从 Discourse 注销,但最近有报告称,当 WordPress 上使用了 Memberpress 插件时,此功能无法正常工作:https://meta.discourse.org/t/sso-unable-to-logout/132283。您是否遇到了同样的问题?

是的,我正在使用那个插件,看起来是同样的问题。

太好了!我明天会尽量修复这个问题。

因为你是那个男人。 谢谢,西蒙。:slight_smile:

那真是太有帮助了!如果您需要我提供任何进一步的信息,请随时告诉我。谢谢!

我在复现该问题时遇到了一些困难。如果我能在这两个 WordPress 站点中的任意一个上创建账户,或许就能弄清楚问题所在。我不需要管理员权限。如果可行的话,请通过站内信将站点详情发送给我。

@simon 已为你设置好会员资格。你应该已收到一封设置密码的邮件。收到请回复。先谢了。

我也在我的网站上创建了账户,并已通过私信将详细信息发送给您。

@TGP 能否尝试将 Discourse 的 logout redirect 设置更改为 https://www.thegearheadproject.com/?request=logout?目前看来,非 www 请求会被重定向到 www URL,但 request=logout 查询参数在重定向过程中未被保留。

这或许无法解决问题,但最好先排除这一可能的原因。

这些网站的登出问题似乎互不相关。

@robtech 当我从您的 Discourse 站点登出时,也会从您的 WordPress 站点登出,因此您站点上的这部分登出流程似乎运行正常。我遇到的问题是 WordPress 到 Discourse 的登出同步。从您的 WordPress 站点登出并不会使我从您的 Discourse 站点登出。

请确认您在“WP Discourse 连接”选项卡中设置的 API 密钥和发布用户名是否正确。您需要使用管理员 API 密钥和用户名。最简单的选项是使用您站点的 Master API 密钥,并将发布用户名设为“system”。保存此页面的选项后,您应该会看到一条提示,显示您已“连接到 Discourse