在过去的几周里,一些有问题的(被禁止的)用户一直在创建带有冒犯性/不当用户名的账户。为了防止这种情况发生,我开启了 “Staff must approve all new user accounts before they are allowed to access the site.” (员工必须批准所有新用户账户才能访问网站)的设置,它确实要求批准所有新 账户。
然而,非常烦人的是,每隔几个小时,我都会收到关于旧用户“等待批准的用户”的通知,这些用户是在几个月甚至几年前就加入的 ,远早于此设置被激活之前。
点击通知,我看到:
There are new user signups waiting to be approved (or rejected) before they can access this forum. Please review them.(有新用户注册等待批准(或拒绝)后才能访问此论坛。请审核它们。)
……但点击“Please review them”(请审核它们)显示并没有:
There are no items to review.(没有项目可供审核。)
在 admin/users/list/new 列表中向下搜索,我看到一些用户确实被列为“未批准” 。我找不到这些“未批准”用户之间的任何共同点,除了所有用户都是在该设置切换之前创建的。其中一些用户“primary email: Not verified”(主邮箱:未验证),而另一些则已验证。
我尝试手动批准每一个,但我需要滚动回几百“页”,而且我找不到一种简单的方法按“未批准”进行过滤。
有没有一种快速的方法将所有现有用户标记为“已批准”?或者至少阻止发送关于这些旧用户的通知?
2 个赞
最后,我下定决心,手动滚动了整个用户列表(逐一查找“已批准:否”的用户),然后进入每个用户的个人资料并单独批准了他们
2 个赞
Moin
2024 年4 月 20 日 14:08
4
我注意到了同样的现象,我认为我找到了原因(不是为什么那些用户没有出现在审核队列中,而是为什么他们根本没有被批准):
据我理解的代码,当你启用“must_approve_users”时,大多数在设置启用之前创建的用户都应该被批准:
# Enabling `must_approve_users` on an existing site is odd, so we assume that the
# existing users are approved.
if name == :must_approve_users && new_value == true
User
.where(approved: false)
.joins("LEFT JOIN reviewables r ON r.target_id = users.id")
.where(r: { id: nil })
.update_all(approved: true)
end
这对我大多数用户来说是有效的,但有些用户没有被标记为已批准。
Data Explorer Query
SELECT
id as UserID, approved
FROM
users
ORDER BY id
UserID
Approved
1
true
3
true
…
…
8
true
10
false
11
false
12
false
13
true
当你查看 reviewables 表时,你会注意到用户 ID 与聊天消息的目标 ID 匹配的用户没有被批准。
Data Explorer Query
SELECT id, target_id, target_type
FROM reviewables
ORDER BY target_id
id
target_id
target_type
6
9
ChatMessage
7
10
ChatMessage
8
11
ChatMessage
9
12
ChatMessage
1
2901
Post
2
2909
Post
5
2991
Post
我认为当存在一个目标 ID 与“user”以外的 target_type 匹配时,用户未被批准是一个 bug。
3 个赞