用户被移出群组后,用户标记仍然存在

如果我从一个群组中移除用户,是否应该预期该群组的徽章会立即从该用户的头像中消失?

我刚刚从群组中移除了一位用户。
她没有选择任何主群组。
image

在她的偏好设置中,她没有选择任何徽章。

我已刷新浏览器,并退出后重新登录。

她是否需要退出并重新登录后,徽章才会消失?我是否遗漏了某个步骤?

6 个赞

大多数任务都显示在 forum.example.com/sidekiq/scheduler。例如,如果你修改了徽章查询,可以等待一天让 BadgeGrant 任务运行,也可以手动点击 Trigger 按钮来加速执行。不过,我不确定是哪个任务更新了用户标签。

1 个赞

是的,除了一个微小的边缘情况:匿名用户在某些页面上会在 1 分钟内看到旧的标识。

我们将进行调查并修复。

3 个赞

即使将主群组更改为具有关联徽章的新主群组,用户徽章也会保留。

1 个赞

此处问题现已修复

您是否在单个群组页面使用批量操作“设为所有主群组”来更改主群组?

4 个赞

没有,我是在用户管理页面上更改了单个用户的主群组。

1 个赞

我想告知您,该问题在 2.8.0.beta4 中仍然存在(https://github.com/discourse/discourse/commits/1a65f0bfbbd32887a3c90fdaa894487c21f8467a)。

我们尚未更新到最新的提交,因为目前没有针对此 bug 的修复更改。
在我们的情况下,通过 Discourse Connect SSO 更新群组时,用户徽章保持不变。我们看到用户已不在群组中,但徽章仍然保留。

希望这有助于识别并修复该 bug。

此修复无法回溯生效。您需要手动更新旧用户的标签。请问受此影响的您这边有多少用户?

哇。嗯,我不知道具体的估算数据。根据我们的数据流,每天可能有数十甚至数百名用户通过 SSO 加入或退出特定群组。
无论如何,我能统计出那些拥有过时(未与群组关联)徽章的用户吗?

那么,如何编辑其他用户的徽章呢?我在管理面板中找不到这个选项。我不是说要一个个更新这么多用户来清除这个 bug 的遗留问题。

顺便提一下,从群组设置中移除徽章并上传新的徽章图片并没有帮助。该群组之外的用户仍然保留着群组的徽章 :frowning:

只是想确认一下,是否有人知道如何处理这个问题


抱歉多次顶起这个帖子,但这个 bug 确实给我们的社区带来了很大困扰 :frowning:
@vinothkannans 对于它对我们造成的影响,您有什么建议吗?

User.where(flair_group_id: REPLACE_WITH_GROUP_ID).where.not(primary_group_id: REPLACE_WITH_GROUP_ID).update_all(flair_group_id: nil)

上述命令可以解决您的问题。请在您的 Rails 控制台 中运行此命令。在执行之前,请务必备份数据。

感谢您的回复。我理解得对吗?由于此错误的影响,我们是否应该每天或以其他频率执行此类查询?问题在于,我们的用户组每天都会更新,并且每当用户在主网站上的订阅状态发生变化时也会更新。所有操作均通过 SSO 完成。

不,您无需定期运行此操作。上述提交已修复该问题。此命令将修复之前受影响用户的头衔。

我明天将检查替代方案。

1 个赞

谢谢,在您的调查结果出来之前,我会耐心等待,暂不转向 Rails 查询。
如果在这个问题上我能为您提供任何帮助,请随时告知。

@kinetiksoft 下面的 Rails 代码将修复所有组中所有成员的问题。如果用户不再属于某个 flair 组,它将移除该用户的组 flair。

注意,您无需定期运行此脚本。这是针对那些受影响的旧用户的一次性修复。在运行之前,请务必备份作为预防措施。

User.joins("LEFT OUTER JOIN group_users ON group_users.user_id = users.id AND group_users.group_id = users.flair_group_id").where(group_users: { id: nil }).where.not(flair_group_id: nil).update_all(flair_group_id: nil)

@vinothkannans

谢谢!我们会在运行查询后告知您,并在接下来的几天内提供更新,以确认徽章与群组关系之间是否存在不一致。

1 个赞

https://github.com/discourse/discourse/pull/14367

此外,我在上述提交中推送了另一个修复。请确保在合并后升级您的站点。

1 个赞

好的,没问题,我会查看升级部分即将到来的提交。
我们是应该等待上述 SQL 查询,还是可以在不等待提交合并到我们 Discourse 实例的情况下直接进行?

升级后可以运行该命令。

2 个赞