Richie
(Richie Rich)
1
当前运行 Discourse 3.5.0.beta5-dev (eff31e0d42)。
有人知道 /admin/users/list/all.json 端点的 API 响应在最近一周左右是否有过更改吗?
具体来说:
GET /admin/users/list/all.json?email=email@example.com

我认为当使用精确的电子邮件地址查询时,该端点以前会返回一个直接表示单个用户的扁平 JSON 对象。
然而,当前的响应结构现在似乎将用户对象包装在一个新的 users 数组中,这破坏了我们这边的一些现有 SSO 集成。
以下是响应的匿名伪示例,以供参考,我认为这在“之前”和“之后”有所改变。
旧:
{
"id": 1,
"username": "sampleuser",
"name": "",
"avatar_template": "/user_avatar/example.com/sampleuser/{size}/avatar.png",
"active": true,
"admin": false,
"moderator": false,
"last_seen_at": "2025-05-11T08:27:28.578Z",
"created_at": "2020-01-01T12:00:00.000Z",
"suspended": false,
"trust_level": 1
}
新:
{
"users": [
{
"id": 1,
"username": "sampleuser",
"name": "",
"avatar_template": "/user_avatar/example.com/sampleuser/{size}/avatar.png",
"email": "someone@example.com",
"active": true,
"admin": false,
"moderator": false,
"last_seen_at": "2025-05-11T09:34:35.900Z",
"created_at": "2020-01-01T12:00:00.000Z",
"suspended": false,
"trust_level": 1
}
],
"meta": {
"message_bus_last_ids": {
"bulk_delete": 0
}
}
}
有人知道可能导致此更改的最近提交吗?
RGJ
(Richard - Communiteq)
3
确实已更改,提交是这个
diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb
index 92d906f161..70406efce5 100644
--- a/app/controllers/admin/users_controller.rb
+++ b/app/controllers/admin/users_controller.rb
@@ -32,7 +32,16 @@ class Admin::UsersController < Admin::StaffController
def index
users = ::AdminUserIndexQuery.new(params).find_users
- opts = { include_can_be_deleted: true, include_silence_reason: true }
+ opts = {
+ include_can_be_deleted: true,
+ include_silence_reason: true,
+ root: :users,
+ meta: {
+ message_bus_last_ids: {
+ bulk_delete: MessageBus.last_id("/bulk-user-delete"),
+ },
+ },
+ }
if params[:show_emails] == "true"
StaffActionLogger.new(current_user).log_show_emails(users, context: request.path)
opts[:emails_desired] = true
Richie
(Richie Rich)
4
昨天我更新的 73x 个提交中,无论如何搜索都找不到这个 DEV: 将 selenium driver 替换为 playwright 的重大变更。
感谢 @RGJ 提供的链接
pfaffman
(Jay Pfaffman)
7
我设法找到了那个提交,但无法(现在也看不到)在哪里更改了数据结构(我当时在手机上,这让事情变得更困难)。
Richie
(Richie Rich)
8
我猜这就是 API 响应中的重大更改 :/\n\n在 /app/assets/javascripts/admin/addon/controllers/admin-users-list-show.js\n\n\n
Richie
(Richie Rich)
10
我们现在已经从这次变更的影响中恢复过来了。
也许有点离题了,但有没有什么方法可以跟踪这些类型的更新,以便在 API 响应从“X”变为“Y”多年后发生变化时通知我自己?
也许可以运行一些脚本化的本地单元测试,我每天都可以运行?
不过,我现在说出来之后,直到我更新了 Discourse 并且它破坏了集成之后,我才会收到通知。
我猜是有一个暂存环境……
pfaffman
(Jay Pfaffman)
11
您可以设置一个暂存环境。您也可以为代码创建一个 GitHub Action,该 Action 每天启动 discourse 并针对最新的 discourse 运行测试。
pfaffman
(Jay Pfaffman)
13
我认为一个调用端点并进行渲染的插件可以是一种简单的测试方法。然后将默认的 GitHub Action 从仅在推送时运行改为每天运行。
RGJ
(Richard - Communiteq)
14
文档似乎也需要更新 Discourse API Docs
理想情况下,文档将从源代码自动生成,我们可以查看文档的提交历史记录,其中只包含接口的更改。
这也破坏了我们的一项集成 - 这是我们应该预料到的吗?
j.jaffeux
(Joffrey Jaffeux)
19
j.jaffeux
(Joffrey Jaffeux)
21
对不起,真遗憾,我别无选择,只能恢复,你遇到了不幸的时机。
可以向@Richie发起拉取请求的一个好理由,因为这样就有了一个简单的还原按钮的可能性。
Richie
(Richie Rich)
23
这是我们生活在最前沿所承担的风险和付出的代价 
Discourse居然是开源的,这仍然让我震惊。我有什么资格抱怨 
感谢你修复了这个问题 @j.jaffeux
