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
5 个赞
Richie
(Richie Rich)
4
昨天我更新的 73x 个提交中,无论如何搜索都找不到这个 DEV: 将 selenium driver 替换为 playwright 的重大变更。
感谢 @RGJ 提供的链接
1 个赞
pfaffman
(Jay Pfaffman)
7
我设法找到了那个提交,但无法(现在也看不到)在哪里更改了数据结构(我当时在手机上,这让事情变得更困难)。
1 个赞
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 运行测试。
2 个赞
pfaffman
(Jay Pfaffman)
13
我认为一个调用端点并进行渲染的插件可以是一种简单的测试方法。然后将默认的 GitHub Action 从仅在推送时运行改为每天运行。
1 个赞
RGJ
(Richard - Communiteq)
14
文档似乎也需要更新 Discourse API Docs
理想情况下,文档将从源代码自动生成,我们可以查看文档的提交历史记录,其中只包含接口的更改。
4 个赞
这也破坏了我们的一项集成 - 这是我们应该预料到的吗?
1 个赞
j.jaffeux
(Joffrey Jaffeux)
19
3 个赞
j.jaffeux
(Joffrey Jaffeux)
21
对不起,真遗憾,我别无选择,只能恢复,你遇到了不幸的时机。
2 个赞
可以向@Richie发起拉取请求的一个好理由,因为这样就有了一个简单的还原按钮的可能性。
1 个赞
Richie
(Richie Rich)
23
这是我们生活在最前沿所承担的风险和付出的代价 
Discourse居然是开源的,这仍然让我震惊。我有什么资格抱怨 
感谢你修复了这个问题 @j.jaffeux

4 个赞