不给不存在的用户授予徽章?

查看我们的一个徽章页面时,我注意到:

这让我感到好奇——这些头像都发生了什么事?

原来,这些用户并不存在。

我们或许不应该向已不存在的用户授予徽章?或者至少阻止它们被显示?无论如何,这些头像正在挤占真实用户(也就是我们真正关心的用户)的头像位置!

10 个赞

嗯……这里似乎有些不对劲,因为:

grant 已经关联到了 user,它必须从某个地方获取 user_id。

我想知道这种作用域的方式是否意味着 dependent: :destroy 没有正常工作。

无论如何,我们可以添加一个每周清理任务。

1 个赞

考虑到这些徽章授予的时间(截至撰写本文时它们是最最新的),我怀疑这些徽章是在用户账户不存在时授予的,而不是在账户存在时授予、随后在账户删除时未删除。

需要进一步核实。

2 个赞

这很奇怪,因为行中包含用户 ID,如果用户被清除,就无处获取这些 ID 了。

3 个赞

我认为用户 ID 存储在 incoming_links 表中。这些记录不会被级联删除,而分享徽章查询仅防止 incoming_links 表中的 user_id 为 null:

https://github.com/discourse/discourse/blob/main/lib/badge_queries.rb#L199

“首次分享”徽章应该存在类似的漏洞:

https://github.com/discourse/discourse/blob/main/lib/badge_queries.rb#L64

3 个赞

我创建了一个拉取请求,将这些徽章查询关联到 users 表——这是我的第一个拉取请求,希望一切顺利!

3 个赞