WordPress DiscourseConnect 客户端 - 过期 nonce

据我所知,问题不在于 WordPress 对象缓存,因为它在请求之间不是持久的。问题发生在具有某种持久缓存的网站上:https://developer.wordpress.org/reference/classes/wp_object_cache/#persistent-caching。这可以通过插件进行配置,但一些托管提供商(例如 WP Engine)也默认启用了它。我认为对于 WP Engine 的情况,他们不在其登录页面上启用对象缓存,但会在所有其他页面上为匿名用户启用它。因此,在 WP Engine 上,只有当“使用 Discourse 登录”链接添加到登录页面以外的页面时,才会触发此问题。

discourse_sso_url 的问题在于,当它始终设置为相同值时,对于启用了持久缓存的网站,它将始终返回相同的 nonce。将其 discourse_sso 值设置为随机字符串,而不是默认值 1,会破坏缓存。至少在我以前测试时一直如此。我现在没有配置来测试它。

编辑:这里有更多关于该问题的细节:https://meta.discourse.org/t/discourse-as-provider-wp-sso-nonce-error/117113/14。我查看这个问题已经有一段时间了。当时解决该问题的方法似乎是 同时discourse_sso_url 中添加一个随机字符串,并确保登录链接显示的页面未启用页面缓存(否则,对于匿名用户的每次访问,随机字符串将不是唯一的)。