Discourse SSO 与 WordPress 仅在 /core/wp-admin URL 下有效

我部署了一个新的 WordPress 插件,它依赖 Discourse 的 SSO 功能,但在生产环境的站点上出现了一个奇怪的 bug。

在本地环境中,我可以登录并使用 redirect_url 参数成功返回到目标页面。然而,在生产环境中,SSO 仅在 redirect_url 为 wp-admin 的 URL 时才能正常工作,例如:

SSO 工作正常…
https://www.example.com/core/wp-login.php?redirect_to=https%3A%2F%2Fwww.example.com%2Fcore%2Fwp-admin%2F&reauth=1

SSO 未能成功认证,只是返回到登录/发布页面
https://www.example.com/core/wp-login.php

您之前遇到过类似的问题吗?有什么建议可以排查吗?如果问题持续存在,我可能得自己构建一个重定向机制来捕获 wp-admin 的跳转。

我相当确信,这里要么是反向代理配置错误,要么就是类似的花招。请问您是否在使用 Cloudflare?

是的,是 Cloudflare。我们可以在 Cloudflare 中测试哪些设置?

关闭橙色云。

哈哈,这可不是我能决定的,网站主要使用 Cloudflare 作为缓存。我得研究一下反向代理,看看能不能调整 CF 里的某些设置。

已有数十个关于 Cloudflare 优化引发问题的讨论帖。你可以将 Cloudflare 用作 CDN,并配置 Discourse 仅将通过 Cloudflare 可缓存的内容进行重定向。

你也可以暂时禁用该优化,看看是否能解决问题。

只需在 Discourse 中通过页面规则禁用 Cloudflare 的“性能”和“Rocket Loader

是的,这是一系列奇怪问题的混合体,部分原因似乎也与 WordPress 安装目录有关。目前我编写了一个临时解决方案,它总是重定向到 /core/wp-admin,然后会有一个最终的 ?final_redirect_url 参数,由我自定义的钩子捕获,并执行相应操作将我们带回目标位置。

看起来您正在使用 WP Discourse – WordPress plugin | WordPress.org SSO 客户端选项(Discourse 作为 SSO 提供商)。您能确认一下是否如此吗?