TGP
(Brian)
2019 年10 月 30 日 22:11
1
我需要一些建议。
我们使用 WordPress 作为 SSO 提供商(我们使用 MemberPress 在 WordPress 上管理对 Discourse 和 LMS 内容的访问)。新用户注册和登录功能运行完美——但我似乎无法登出。
我已经添加了 ?request=logout 重定向,但一旦刷新登出页面,我立刻又回到了登录状态。
起初我以为这可能是因为我同时在另一个浏览器标签页中打开了 WordPress,但即使在我退出 WordPress 并关闭该标签页后,这个问题依然存在。
感觉我们离成功真的只差一步了。希望有人愿意分享一些故障排除建议,让我们能彻底解决这个问题。
谢谢。
这是一个演示连续两次登出失败的小动图:
以下是我在 WordPress 中的 SSO 设置截图:
以及 Discourse 中的设置截图:
simon
2019 年10 月 30 日 22:26
2
看起来您的配置都已正确设置。这是一个常规的 WordPress 站点,还是多站点(multisite)设置的一部分?在网络中,除主站点外的其他站点在同步登出时可能会出现一些问题。
从您的屏幕录像来看,您的 Discourse 站点似乎已设置为“需要登录”。目前的情况是,Discourse 会将您重定向到 WordPress 站点并发起 SSO 请求,然后由于您仍登录在 WordPress 上,系统会自动为您登录。预期的行为是,您应以已登出用户的身份被引导至 WordPress 登录页面。
与 Discourse 同步登出功能依赖于 WordPress 的 clear_auth_cookie 钩子。可能是您站点上的另一个插件对此造成了干扰。
TGP
(Brian)
2019 年10 月 30 日 22:48
3
谢谢,Simon。这是一个单一的 WordPress 站点,使用 cookie 似乎是合理的。我会从这方面着手调查。
感谢建议!
brian driggs //// tgp
simon
2019 年10 月 30 日 22:59
4
如果您有一个开发站点,请尝试禁用除 WP Discourse 之外的所有插件,然后查看问题是否仍然存在。如果您没有开发站点,可以尝试使用 Health Check 插件 在用户会话期间停用插件。有关如何使用该插件在会话中停用插件的详细信息,请参见此处:Troubleshooting using the Health Check – Make WordPress Support
TGP
(Brian)
2019 年10 月 31 日 16:23
5
搞定。我虽然没有开发站点,但健康检查插件一次就完美运行——甚至还是第一次尝试。看来我得深入研究一下 MemberPress 和 auth_cookie 了。谢谢你,Simon。
以下是我采取的步骤,以防其他人需要参考:
安装了健康检查插件。
– 将站点置于故障排查模式。
– 启用了 WP-Discourse 插件。
打开 Discourse 站点。
– 退出登录。
– 被重定向到 WordPress 登录页面(登录表单缺失)。
– 完全无法重新登录 Discourse。(这正是期望的功能。)
启用 MemberPress。
– (我意识到登录页面使用的是 MemberPress 生成的用户名/密码字段。)
– 登录表单重新出现。
打开 Discourse 站点,发现已经处于登录状态。
尝试退出登录,却被重定向循环回到 Discourse 站点,仍然处于登录状态。
我从 2007 年就开始使用 WordPress,但直到现在才听说过这个插件。再次感谢,Simon!
simon
2019 年10 月 31 日 16:44
6
是的,它在故障排查方面非常有用。
我想检查一下 MemberPress 的情况,但这是一个付费插件。查看他们的文档后,似乎可以在插件的设置页面中配置一个“MemberPress 登出重定向 URL”。问题可能与该设置有关。
TGP
(Brian)
2019 年10 月 31 日 16:56
7
我能如何提供帮助?
我注意到了登出重定向设置并设置了一些目标,但似乎没有任何效果。
我正在尝试寻找一种从外部站点登出 Discourse 的方法。我查阅了相关文档,似乎实现方式是按照这篇帖子 中提到的,发送一个 API POST 请求。
问题是,我不太清楚如何发起 API 请求,也不知道接下来该怎么做。我已经下载了 Postman 并尝试在其中进行实验,但进展困难。我不确定如何构造所需的 API 请求,也不清楚之后如何在外部站点上实现它。
关于如何解决这个问题,有什么建议吗?
simon
2019 年11 月 14 日 21:45
9
robtech:
不确定之后如何在外部网站上实现它。
如果你能提供关于你外部网站的一些详细信息,这里的某人或许能提供帮助。
该网站是一个使用 Memberpress 的 WordPress 站点,同时作为 Discourse 论坛的 SSO 提供商。当用户在 WordPress 上注销后,我可以将他们重定向到一个 URL,我希望借此同时实现从 Discourse 注销。或者,我是否可以通过在 functions.php 中添加一个 PHP 函数来发送 API 请求?
simon
2019 年11 月 14 日 22:12
11
您是否使用了 WP Discourse 插件进行 SSO?如果是,从 WordPress 注销应该也会从 Discourse 注销,但最近有报告称,当 WordPress 上使用了 Memberpress 插件时,此功能无法正常工作:https://meta.discourse.org/t/sso-unable-to-logout/132283。您是否遇到了同样的问题?
那真是太有帮助了!如果您需要我提供任何进一步的信息,请随时告诉我。谢谢!
simon
2019 年11 月 14 日 23:40
16
我在复现该问题时遇到了一些困难。如果我能在这两个 WordPress 站点中的任意一个上创建账户,或许就能弄清楚问题所在。我不需要管理员权限。如果可行的话,请通过站内信将站点详情发送给我。
TGP
(Brian)
2019 年11 月 15 日 03:47
17
@simon 已为你设置好会员资格。你应该已收到一封设置密码的邮件。收到请回复。先谢了。
我也在我的网站上创建了账户,并已通过私信将详细信息发送给您。
simon
2019 年11 月 15 日 17:20
19
@TGP 能否尝试将 Discourse 的 logout redirect 设置更改为 https://www.thegearheadproject.com/?request=logout?目前看来,非 www 请求会被重定向到 www URL,但 request=logout 查询参数在重定向过程中未被保留。
这或许无法解决问题,但最好先排除这一可能的原因。
simon
2019 年11 月 15 日 18:25
20
这些网站的登出问题似乎互不相关。
@robtech 当我从您的 Discourse 站点登出时,也会从您的 WordPress 站点登出,因此您站点上的这部分登出流程似乎运行正常。我遇到的问题是 WordPress 到 Discourse 的登出同步。从您的 WordPress 站点登出并不会使我从您的 Discourse 站点登出。
请确认您在“WP Discourse 连接”选项卡中设置的 API 密钥和发布用户名是否正确。您需要使用管理员 API 密钥和用户名。最简单的选项是使用您站点的 Master API 密钥,并将发布用户名设为“system”。保存此页面的选项后,您应该会看到一条提示,显示您已“连接到 Discourse