最新的WP-Discourse更新导致了一些意外行为

WP-Discourse 插件的最新提交导致所有自定义帖子(通过 EventON 插件创建)都被归因于 system 用户,尽管该用户同时存在于 Discourse 和 WordPress 中。

如果回滚到 2.3.7 版本,它会按预期工作,但更新到 2.3.8 版本会导致此错误发生。

我们通过电子邮件收到此错误:

失败原因:
 Discourse 返回了 400 响应代码。
 param 缺失或值为空:post
 你是指? post
        post[raw]
        controller
        title

我认为这有助于识别可能的原因。

嘿,你能分享一下你提到的插件的链接吗?另外,你在 WP Discourse 日志中看到什么了吗?

您好 @angus

插件在这里:https://www.myeventon.com/

您需要插件 v2.3.7 或 v2.3.8 的日志吗?

1 个赞

请同时启用。请开启详细发布日志。

v2.3.7:

[2022-02-21 08:07:11] publish.INFO: create_post.post_success {"wp_title":"[Please Ignore] Test Event","wp_author_id":"3958","wp_post_id":126070,"discourse_post_id":""} 
[2022-02-21 08:07:11] publish.INFO: create_post.body_valid {"wp_title":"[Please Ignore] Test Event","wp_author_id":"3958","wp_post_id":126070,"discourse_post_id":""} 

使用 2.3.7 版本,帖子已成功链接到我在 wordpress 和 discourse 上的用户帐户。

v2.3.8:

[2022-02-21 08:10:15] publish.INFO: create_post.post_success {"wp_title":"[Please Ignore] Another test event","wp_author_id":"3958","wp_post_id":126071,"discourse_post_id":""} 
[2022-02-21 08:10:15] publish.INFO: create_post.body_valid {"wp_title":"[Please Ignore] Another test event","wp_author_id":"3958","wp_post_id":126071,"discourse_post_id":""} 

使用 2.3.8 版本,帖子已链接到我在 wordpress 上的用户和 discourse 上的系统用户。

1 个赞

请为我确认几件事

  1. 您的自定义帖子类型(即活动)是否已成功发布到 Discourse
  2. 您以前是否见过 400 错误
  3. 是哪类用户(您期望使用其 Discourse 用户名)在发布帖子(即他们是管理员还是非管理员)
  4. 您正在使用哪种类型的 API 密钥将 WordPress 连接到 Discourse

是的,帖子已成功发布,但在 v2.3.8 中错误地将用户(系统)归属。

不,我们在 wp-discourse 插件的任何先前版本中都没有看到任何 400 错误。

这些用户是 WordPress 上的非管理员注册用户,到目前为止对我们来说一直有效。任何用户都能正确链接到 Discourse。

这是一个全局 API 密钥

1 个赞

当此 PR 合并后(并且版本已推送到 Wordpress.org),该功能将按预期工作。

2 个赞

我遇到了同样的错误,并可以确认是在升级 WP Discourse 到 2.3.8 版本后开始的。

使用此版本,主题会被创建,但使用的是默认用户。

为确认这一点,我将 WP Discourse 回滚到了 2.3.7 版本,现在它又能正常工作了。

2 个赞

谢谢,这将在合并 PR 时得到处理。您能否也确认这两个问题?

  • 正在发布帖子的用户类型(您期望使用其 Discourse 用户名)是什么(例如,他们是管理员还是非管理员)?
  • 您正在使用哪种类型的 API 密钥将 WordPress 连接到 Discourse?

这里也有同样的问题。不是自定义帖子类型。

不是管理员用户,而是版主
“所有用户”API 密钥。

  • 用户是版主和一些管理员
  • API“所有用户”

大家好,2.3.9 版本现已上线,修复了此问题。请更新并告知我进展。

1 个赞

我们遇到了 2.3.9 的相同问题,并将回滚到 2.3.7,并禁用此插件的自动更新。

1 个赞

您好 @angus

抱歉打扰,我的问题似乎已在 WordPress 5.9.1 和 WP Discourse 2.3.9 中得到修复。

但是,似乎 Discourse 现在会对每个已发布的帖子进行一些额外处理,并且所有权在事后从系统用户转移到了发布用户?

1 个赞

@orenwolf,很抱歉听到您仍然遇到问题。您能否确认您期望的用户是否在他们的 WordPress 个人资料中拥有“Discourse 用户名”?


总的来说,感谢您对此的耐心。在我自己的各种站点测试(以及插件自身的单元测试)中,“Discourse 用户名”功能在“2.3.9”版本上现已按预期运行。如果您仍有问题,请确认您使用的是最新版本的插件,并且您期望的作者拥有“Discourse 用户名”。

您可能想知道为什么会出现这个问题。我认为提供一些背景信息(这也将回答您的问题 @itsbhanusharma)会很有帮助。以前,此功能的工作方式是使用“Api-Username”标头中的不同用户(参见此处)。之所以认为这是必要的,是因为 Discourse 中的相关终结点不支持设置与执行 API 请求的用户不同的帖子创建者。

其结果是,此功能仅在您拥有“所有用户”API 密钥和“全局”范围时才有效。我只想指出,一段时间以来,创建 WP Discourse 插件 API 密钥的标准说明如下:

如果您尚未创建 API 密钥,请点击“新建 API 密钥”,将用户级别设置为“单个用户”,将“用户”设置为管理员帐户,选择“全局密钥”并点击“保存”。在此处复制并粘贴 API 密钥。

遵循这些说明意味着此(未记录的)功能将不起作用,并且已为各种站点造成了问题。

此外,出于各种安全原因,我已逐步对插件进行更改,以允许使用更具体的 API 密钥。这将需要对 Discourse 进行更改,并且(在合并后)将允许插件管理员自行颁发新的、限制性更强的 API 密钥。届时我将对此进行公告。

是的 @itsbhanusharma,此功能现在的工作方式是,在创建帖子后(如果存在“Discourse 用户名”),会发出第二个请求来更改帖子的所有者。实际上,这是通过 Discourse API 任意设置帖子所有者的唯一正确方法(而无需如上所述使用 Api-Username 和所有用户全局密钥)。考虑到这是什么类型的操作,这不应成为性能问题。

4 个赞

这不是一个性能问题,只是向不太懂技术的人解释他们帖子顶部的铅笔图标是正常的,而且它将保持不变,这会有点麻烦。

这需要一些时间,但最终我们会习惯的。

帖子显示为已编辑,这有点令人不快,但只要一切正常,那就没关系。

然而,通知错误是一个问题。它们显示新帖子是由系统用户创建的。

到目前为止,这感觉就像一种权宜之计,而不是解决方案。无法自动以正确用户的身份发帖,这无疑是向后迈出的一大步。我不确定是什么导致了这个问题。

简而言之,出于各种原因,我一直在逐步更改插件处理所有与 discourse 请求的方式,特别是为了测试和安全。在此处无法详述这些更改的完整背景和理由。我理解就此特定功能而言,这可能感觉像是“没坏就别修”,但这里有更广泛的背景。

这些更改已经进行了一段时间(数月),但它们现在浮出水面的原因是我在 2.3.8 版本中犯了一个错误。因此,我在 2.3.9 版本中包含了本应在该版本中进行的更改。

话虽如此,@jtbayly @itsbhanusharma 我听到了你们对这个特定功能的不同处理方式的反馈。我理解这可能感觉像是一种权宜之计。但事实并非如此。尽管如此,鉴于你们的反馈,我将在插件中添加现有的方式,并提供一个设置供你们选择使用(将在 2.4.0 版本中上线)。我将在未来几天合并后跟进通知。

我希望在解决你们两人提出的问题后,能够完全消除这种方法,这很可能需要对 discourse/discourse 进行进一步的更改。如前所述,我将在下个月(取决于何时将更改合并到 discourse/discourse)就插件处理 API 密钥的方式的更改发布更广泛的公告,其中将涵盖这方面的内容。

4 个赞

我说这话的意思是承认我不确定是否还有其他前进的道路。并不是“你为什么要去弄坏它!”的评论。

非常感谢您在更新核心 Discourse 的同时,努力维护 WP 插件的正常工作。并且非常高兴核心(很可能)即将进行的更改将允许在此领域进行改进。

1 个赞