# SSO：无法登出

**URL:** https://meta.discourse.org/t/sso-unable-to-logout/132283
**Category:** WordPress
**Created:** [2019年十月30日 22:11 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283 "2019-10-30T22:11:31Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![TGP](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tgp/32/153649_2.png) [@TGP](https://meta.discourse.org/u/TGP)
#### Post date: [2019年十月30日 22:11 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/1 "2019-10-30T22:11:31Z")

</div>

我需要一些建议。🙂

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

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

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

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

谢谢。

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

 ![discourse-logout-loop](https://global.discourse-cdn.com/meta/original/3X/7/6/7676a06b8393f4fad982945c1c77d1611dc459cb.gif)

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

 ![38%20PM](https://global.discourse-cdn.com/meta/original/3X/5/4/5402caa78ec920cc6bac15684e561b5393b5a3d7.png)

以及 Discourse 中的设置截图：

 ![52%20PM](https://global.discourse-cdn.com/meta/original/3X/e/1/e1dc7cbd1ae318903ad2a9776ce7ca39a92bdb5b.png) ![07%20PM](https://global.discourse-cdn.com/meta/original/3X/c/3/c3b33ae3831489ecb654e5631be7c1d70cb44e1a.png) ![46%20PM](https://global.discourse-cdn.com/meta/original/3X/a/1/a1bf4c972ade6230c7608c35381bde4b0c1de240.png)

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2019年十月30日 22:26 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/2 "2019-10-30T22:26:02Z")

</div>

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

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

与 Discourse 同步登出功能依赖于 WordPress 的 [`clear_auth_cookie`](https://developer.wordpress.org/reference/hooks/clear_auth_cookie/) 钩子。可能是您站点上的另一个插件对此造成了干扰。

---

<div class="post-metadata">

### Author: ![TGP](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tgp/32/153649_2.png) [@TGP](https://meta.discourse.org/u/TGP)
#### Post date: [2019年十月30日 22:48 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/3 "2019-10-30T22:48:52Z")

</div>

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

感谢建议！

brian driggs //// tgp

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2019年十月30日 22:59 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/4 "2019-10-30T22:59:20Z")

</div>

如果您有一个开发站点，请尝试禁用除 [WP Discourse](https://github.com/discourse/wp-discourse) 之外的所有插件，然后查看问题是否仍然存在。如果您没有开发站点，可以尝试使用 [Health Check 插件](https://en-ca.wordpress.org/plugins/health-check/) 在用户会话期间停用插件。有关如何使用该插件在会话中停用插件的详细信息，请参见此处：[Troubleshooting using the Health Check – Make WordPress Support](https://make.wordpress.org/support/handbook/appendix/troubleshooting-using-the-health-check/#troubleshooting%E3%80%82)

---

<div class="post-metadata">

### Author: ![TGP](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tgp/32/153649_2.png) [@TGP](https://meta.discourse.org/u/TGP)
#### Post date: [2019年十月31日 16:23 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/5 "2019-10-31T16:23:50Z")

</div>

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

**以下是我采取的步骤，以防其他人需要参考：**

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

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

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2019年十月31日 16:44 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/6 "2019-10-31T16:44:54Z")

</div>

> [@TGP](#):
>
> 我从 2007 年就开始使用 WP，直到现在才听说过这个插件。

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

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

---

<div class="post-metadata">

### Author: ![TGP](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tgp/32/153649_2.png) [@TGP](https://meta.discourse.org/u/TGP)
#### Post date: [2019年十月31日 16:56 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/7 "2019-10-31T16:56:15Z")

</div>

> [@simon](#):
>
> 我想检查一下 MemberPress 的情况，但这是一个付费插件。

我能如何提供帮助？

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

 ![05%20AM](https://global.discourse-cdn.com/meta/original/3X/3/c/3c89580310f4cc447d7bfe98f1d5503872f15c21.png)

---

<div class="post-metadata">

### Author: ![robtech](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/robtech/32/161256_2.png) [@robtech](https://meta.discourse.org/u/robtech)
#### Post date: [2019年十一月14日 21:34 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/8 "2019-11-14T21:34:20Z")

</div>

我正在尝试寻找一种从外部站点登出 Discourse 的方法。我查阅了相关文档，似乎实现方式是按照[这篇帖子](https://meta.discourse.org/t/implement-log-out-button/122321)中提到的，发送一个 API POST 请求。

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

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

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2019年十一月14日 21:45 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/9 "2019-11-14T21:45:42Z")

</div>

> [@robtech](#):
>
> 不确定之后如何在外部网站上实现它。

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

---

<div class="post-metadata">

### Author: ![robtech](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/robtech/32/161256_2.png) [@robtech](https://meta.discourse.org/u/robtech)
#### Post date: [2019年十一月14日 22:07 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/10 "2019-11-14T22:07:38Z")

</div>

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

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2019年十一月14日 22:12 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/11 "2019-11-14T22:12:59Z")

</div>

> [@robtech](#):
>
> 该网站是一个使用 Memberpress 的 WordPress 站点，并且它是我的 Discourse 论坛的 SSO 提供商。

您是否使用了 [WP Discourse](https://github.com/discourse/wp-discourse) 插件进行 SSO？如果是，从 WordPress 注销应该也会从 Discourse 注销，但最近有报告称，当 WordPress 上使用了 Memberpress 插件时，此功能无法正常工作：[https://meta.discourse.org/t/sso-unable-to-logout/132283。您是否遇到了同样的问题？](https://meta.discourse.org/t/sso-unable-to-logout/132283%E3%80%82%E6%82%A8%E6%98%AF%E5%90%A6%E9%81%87%E5%88%B0%E4%BA%86%E5%90%8C%E6%A0%B7%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%9F)

---

<div class="post-metadata">

### Author: ![robtech](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/robtech/32/161256_2.png) [@robtech](https://meta.discourse.org/u/robtech)
#### Post date: [2019年十一月14日 22:23 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/12 "2019-11-14T22:23:47Z")

</div>

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

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2019年十一月14日 22:26 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/13 "2019-11-14T22:26:25Z")

</div>

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

---

<div class="post-metadata">

### Author: ![TGP](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tgp/32/153649_2.png) [@TGP](https://meta.discourse.org/u/TGP)
#### Post date: [2019年十一月14日 22:26 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/14 "2019-11-14T22:26:53Z")

</div>

_因为你是那个男人。_ 谢谢，西蒙。🙂

---

<div class="post-metadata">

### Author: ![robtech](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/robtech/32/161256_2.png) [@robtech](https://meta.discourse.org/u/robtech)
#### Post date: [2019年十一月14日 22:27 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/15 "2019-11-14T22:27:11Z")

</div>

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

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2019年十一月14日 23:40 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/16 "2019-11-14T23:40:06Z")

</div>

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

---

<div class="post-metadata">

### Author: ![TGP](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tgp/32/153649_2.png) [@TGP](https://meta.discourse.org/u/TGP)
#### Post date: [2019年十一月15日 03:47 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/17 "2019-11-15T03:47:04Z")

</div>

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

---

<div class="post-metadata">

### Author: ![robtech](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/robtech/32/161256_2.png) [@robtech](https://meta.discourse.org/u/robtech)
#### Post date: [2019年十一月15日 15:54 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/18 "2019-11-15T15:54:07Z")

</div>

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

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2019年十一月15日 17:20 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/19 "2019-11-15T17:20:38Z")

</div>

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

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

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2019年十一月15日 18:25 UTC](https://meta.discourse.org/t/sso-unable-to-logout/132283/20 "2019-11-15T18:25:03Z")

</div>

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

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

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

[下一頁](https://meta.discourse.org/t/sso-unable-to-logout/132283.md?page=2)
