通知声称有 X 个用户待批准,但未找到任何用户

这看起来像一个 bug,但我不知道如何重现它。

我收到一条私信通知,内容是:

但是当我点击审核链接时,没有待处理的用户。在 /admin/users 中,我看到一些用户尚未验证他们的电子邮件地址。

我无法确定是通知产生了错误的数量,还是以某种方式存在等待批准但未在搜索中显示的用户,或者以某种方式未验证电子邮件的用户被计入通知的待处理用户但未计入批准。

3 个赞

不就是显而易见的事,但会不会是 allow_new_registrations 未勾选? 显然你启用了 must_approve_users 设置,我不确定这在注册被禁用时会受到什么影响。 :thinking: 我认为注册设置会覆盖任何账户创建,但会禁用它。不,那也没道理……

这几乎肯定是一些显而易见的原因,所以我很欢迎你的帮助。

是的,这两个选项都已勾选。有些人已经注册并获得批准。只是声称等待的人数与通知中声称的人数不符。它告诉我 5 个,而过去几天只有 2 个。

1 个赞

确实很奇怪。听起来像是用户注册中的某些内容在发送审批请求(计数)以供审核后被拒绝了……

3 个赞

当您显示所有已审核项目时,是否会显示已审核用户,或者是否会从员工日志中显示? :person_shrugging:

我经常收到关于已审核项目的私人消息/提醒,但这些项目已经审核过了,所以什么也没有显示。

我曾假设问题是其他人在我(或网站所有者)处理用户之前就批准了他们,但我无法以这种方式使数字对得上。

用户可以在其注册获批准前删除其账户吗?

也许吧?我不这么认为,因为他们需要登录才能做到这一点,而他们要等到被批准后才能登录(但我没有检查代码或类似的东西)。

我在提交 bug 报告之前搜索时发现了这个主题,所以在此补充一下。

简而言之,通知的查询是错误的,因为它也计算了被拒绝的用户。

通知:16 位用户等待批准,点击链接,只看到 2 位。

通知使用的查询是这样的:

puts AdminUserIndexQuery.new(query: "pending", stats: false).find_users_query.to_sql

SELECT "users".* FROM "users"
WHERE (suspended_till IS NULL OR suspended_till <= '2023-11-13 11:05:23.225614')
AND "users"."approved" = FALSE
AND "users"."active" = TRUE
ORDER BY users.created_at DESC,users.username

在我的情况下,这会给我 16 位用户:

[4479, 4472, 4456, 4446, 4443, 4430, 4302, 4291, 4206, 4199, 4178, 4168, 4131, 4061, 3677, 3642]

将这些 ID 放入 Reviewables 队列会给我 2 位实际需要批准的用户(状态为 0),以及 14 位已被拒绝的用户(状态为 2):

ReviewableUser.where(type: 'ReviewableUser')
  .where(target_id: ids)
  .pluck(:target_id, :status)

[[3642, 2], [3677, 2], [4061, 2], [4131, 2], [4168, 2],
[4178, 2], [4199, 2], [4206, 2], [4291, 2], [4302, 2],
[4430, 2], [4443, 2], [4446, 2], [4456, 2], [4472, 0], [4479, 0]]
2 个赞

有人今天就此事进行了投诉。在找到所有这些信息之前,我“解决”问题的方式大致如下:

bad=User.where(approved: false);
bad.each do |user| puts "https://community.open-emr.org/admin/users/#{user.id}/#{user.username}"; end;

这会打印出所有用户的管理员 URL,以便您在那里批准或删除它们,我想。

所以我想这仍然是一个错误。

哦,然后:

ids=bad.pluck(:id);
ReviewableUser.where(type: 'ReviewableUser')
  .where(target_id: ids)
  .pluck(:target_id, :status)

现在返回类似这样的内容:

=> [[4610, "rejected"], [4527, "rejected"], [4643, "rejected"], [4648, "rejected"]]

所以也许需要从 ReviewableUser 中删除这些?

或者只是删除用户?

2 个赞

作为一名版主(非管理员),我能够将“已拒绝”的用户列在未经过滤的审核队列中。但在用户部分找不到他们,也无法从审核队列访问已拒绝用户的用户编辑器。

这是用于审核队列的筛选器参数,适用于 gramps.discourse.group/review?additional_filters={}&sort_order=score&status=rejected&type=ReviewableUser

因此,版主要么需要能够在用户选项卡中找到“已拒绝”和“未批准”状态的用户,要么能够从审核队列导航到用户编辑器。

1 个赞

我也遇到了同样的问题,是支持团队将我引导至这里的。

我是该账户上唯一的员工或管理员,因此这肯定是此漏洞,而非其他管理员批准了这些请求。

对于这三条通知,当我点击待处理队列时,没有任何用户等待批准:

2 个赞

我最近开启了新用户审批功能。我收到的申请非常少——这只是零星几个,并非洪水般涌入。我可以 100% 复现这种情况:我会收到通知,审批用户(通常是批准),然后在一分钟左右,我会收到一个新的虚假通知,但审核队列实际上已经清空了。

这感觉像是一个竞态条件。

您可以使用数据浏览器查询来查找队列中未显示的用户,并直接在其管理页面批准他们。

SELECT id as user_id
FROM users
WHERE approved = false
AND active = true

这是我最近的操作。我每 7 天也会收到这条消息。因此我使用了该查询,结果如下:

随后我在用户管理页面进行了验证:

但我仍需查明为何按钮在我的情况下无法工作。我尚未有机会对此进行检查。
希望该按钮对您可以正常使用。我认为存在不止一个导致收到通知但队列中无用户的漏洞。RGJ 发现了一些关于被拒绝用户的问题,我还报告了一个案例:在启用该设置时,某些现有用户未被批准

也许我遇到过类似情况,不过你在那里的搜索(在你的情况下匹配的是聊天)在我的情况下除了用户外并未匹配到任何内容。探索器查询

SELECT id as user_id
FROM users
WHERE approved = false
AND active = true

返回了一位用户,他绝非新用户:

加入时间:2021 年 4 月 9 日
最后登录:4 月 16 日
最后查看:4 月 16 日
浏览量:1308
信任等级:成员

嗯,我无法手动批准他们。出问题了!

编辑:我不是唯一一个遇到这问题的人——看看这个新话题:用户个人资料上的批准按钮无法工作

详情 - 此处离题

在管理界面中我看到了“批准”按钮,点击后没有任何反应。在浏览器控制台中,我看到一个 500 错误。

请求 URL:
“/admin/users/332/approve”
响应文本:
"<!DOCTYPE html>\n<html>\n<head>\n <title>哎呀 - 错误 500</title>\n <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n</head>\n<body>\n <h1>哎呀</h1>\n <p>驱动此讨论论坛的软件遇到了意外问题。我们为给您带来的不便深表歉意…

1 个赞

现在我更担心了,因为我们使用的是 Starter 计划,所以无法使用数据浏览器。这让我觉得可能确实有用户在等待批准,只是我看不见他们。

我从未发现过通知消息标题中提到的用户数量更多。消息显示为 1,而我也只找到了 1 个。

不过,即使不使用数据浏览器,你也能高效地查找未审批用户。你可以通过 /admin/users 页面右上角的按钮导出用户目录。

然后使用你喜欢的工具打开该文件,检查 approved 字段为 false 的用户。我使用的是 Excel,可以看到确实只有一个用户:

1 个赞

@Moin 太有用了,我怎么会没想到呢?

天哪,导出结果显示确实有获批的用户!尽管审核页面仍然是空的:

这似乎是一个严重的漏洞。如果没人来处理这些用户,他们肯定会非常沮丧。在我搜索并批准他们之前,我想先给 Discourse 一个机会,调查一下为什么他们不会出现在 /review 中的漏洞。

1 个赞

他们的账户激活了吗?我这边有时也会有几个这样的用户,因为他们尚未验证电子邮件地址。而且,只有在确认邮箱后才需要工作人员审批(即耗时),这很合理。