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

**URL:** https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293
**Category:** Bug
**Created:** [2021 年7 月 15 日 21:10 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293 "2021-07-15T21:10:49Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![southpaw](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/southpaw/32/79352_2.png) [@southpaw](https://meta.discourse.org/u/southpaw)
#### Post date: [2021 年7 月 15 日 21:10 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/1 "2021-07-15T21:10:49Z")

</div>

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

我刚刚从群组中移除了一位用户。  
她没有选择任何主群组。  
 ![image](https://global.discourse-cdn.com/meta/original/3X/3/2/32111d699cec69d3523c1292657a922e4e2ad7cc.png)

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

 ![image](https://global.discourse-cdn.com/meta/original/3X/c/5/c5d886549aaa31c3214e2ee8d3cba8d47a09facd.png)

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

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

---

<div class="post-metadata">

### Author: ![Mark\_Schmucker](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mark_schmucker/32/124810_2.png) [@Mark\_Schmucker](https://meta.discourse.org/u/Mark_Schmucker)
#### Post date: [2021 年7 月 16 日 01:24 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/2 "2021-07-16T01:24:38Z")

</div>

大多数任务都显示在 [forum.example.com/sidekiq/scheduler。例如，如果你修改了徽章查询，可以等待一天让](http://forum.example.com/sidekiq/scheduler%E3%80%82%E4%BE%8B%E5%A6%82%EF%BC%8C%E5%A6%82%E6%9E%9C%E4%BD%A0%E4%BF%AE%E6%94%B9%E4%BA%86%E5%BE%BD%E7%AB%A0%E6%9F%A5%E8%AF%A2%EF%BC%8C%E5%8F%AF%E4%BB%A5%E7%AD%89%E5%BE%85%E4%B8%80%E5%A4%A9%E8%AE%A9) BadgeGrant 任务运行，也可以手动点击 Trigger 按钮来加速执行。不过，我不确定是哪个任务更新了用户标签。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2021 年7 月 16 日 05:51 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/3 "2021-07-16T05:51:59Z")

</div>

> [@southpaw](#):
>
> 如果我从群组中移除用户，是否应该预期该群组的标识会立即从用户的头像中移除？

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

我们将进行调查并修复。

---

<div class="post-metadata">

### Author: ![md-misko](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/md-misko/32/126315_2.png) [@md-misko](https://meta.discourse.org/u/md-misko)
#### Post date: [2021 年7 月 16 日 06:41 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/6 "2021-07-16T06:41:40Z")

</div>

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

---

<div class="post-metadata">

### Author: ![vinothkannans](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vinothkannans/32/86465_2.png) [@vinothkannans](https://meta.discourse.org/u/vinothkannans)
#### Post date: [2021 年8 月 3 日 14:54 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/7 "2021-08-03T14:54:33Z")

</div>

此处问题现已修复

> <https://github.com/discourse/discourse/pull/13930>
>
> Group flair is not removed while removing a user from the group since the \`befor…e\_save\` callback methods are not triggered while using the \`update\_columns\` method.

> [@md-misko](#):
>
> 更改主群组后，用户标识也会保留。

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

---

<div class="post-metadata">

### Author: ![md-misko](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/md-misko/32/126315_2.png) [@md-misko](https://meta.discourse.org/u/md-misko)
#### Post date: [2021 年8 月 3 日 20:38 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/8 "2021-08-03T20:38:15Z")

</div>

> [@vinothkannans](#):
>
> 您是否在单个群组页面上使用批量操作“设为所有主群组”来更改主群组？

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

---

<div class="post-metadata">

### Author: ![kinetiksoft](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/kinetiksoft/32/229578_2.png) [@kinetiksoft](https://meta.discourse.org/u/kinetiksoft)
#### Post date: [2021 年9 月 3 日 13:35 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/10 "2021-09-03T13:35:56Z")

</div>

我想告知您，该问题在 2.8.0.beta4 中仍然存在（[https://github.com/discourse/discourse/commits/1a65f0bfbbd32887a3c90fdaa894487c21f8467a）。](https://github.com/discourse/discourse/commits/1a65f0bfbbd32887a3c90fdaa894487c21f8467a%EF%BC%89%E3%80%82)

我们尚未更新到最新的提交，因为目前没有针对此 bug 的修复更改。  
在我们的情况下，通过 [Discourse Connect](https://meta.discourse.org/t/13045?silent=true) SSO 更新群组时，用户徽章保持不变。我们看到用户已不在群组中，但徽章仍然保留。

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

---

<div class="post-metadata">

### Author: ![vinothkannans](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vinothkannans/32/86465_2.png) [@vinothkannans](https://meta.discourse.org/u/vinothkannans)
#### Post date: [2021 年9 月 6 日 06:18 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/11 "2021-09-06T06:18:15Z")

</div>

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

---

<div class="post-metadata">

### Author: ![kinetiksoft](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/kinetiksoft/32/229578_2.png) [@kinetiksoft](https://meta.discourse.org/u/kinetiksoft)
#### Post date: [2021 年9 月 6 日 11:29 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/12 "2021-09-06T11:29:39Z")

</div>

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

---

<div class="post-metadata">

### Author: ![kinetiksoft](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/kinetiksoft/32/229578_2.png) [@kinetiksoft](https://meta.discourse.org/u/kinetiksoft)
#### Post date: [2021 年9 月 6 日 17:50 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/13 "2021-09-06T17:50:59Z")

</div>

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

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

---

<div class="post-metadata">

### Author: ![kinetiksoft](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/kinetiksoft/32/229578_2.png) [@kinetiksoft](https://meta.discourse.org/u/kinetiksoft)
#### Post date: [2021 年9 月 10 日 11:42 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/14 "2021-09-10T11:42:59Z")

</div>

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

* * *

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

---

<div class="post-metadata">

### Author: ![vinothkannans](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vinothkannans/32/86465_2.png) [@vinothkannans](https://meta.discourse.org/u/vinothkannans)
#### Post date: [2021 年9 月 16 日 13:41 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/15 "2021-09-16T13:41:32Z")

</div>

```ruby
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 控制台](https://meta.discourse.org/t/how-to-get-into-rails-console/77310/2?u=vinothkannans) 中运行此命令。在执行之前，请务必备份数据。

---

<div class="post-metadata">

### Author: ![kinetiksoft](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/kinetiksoft/32/229578_2.png) [@kinetiksoft](https://meta.discourse.org/u/kinetiksoft)
#### Post date: [2021 年9 月 16 日 13:57 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/16 "2021-09-16T13:57:47Z")

</div>

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

---

<div class="post-metadata">

### Author: ![vinothkannans](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vinothkannans/32/86465_2.png) [@vinothkannans](https://meta.discourse.org/u/vinothkannans)
#### Post date: [2021 年9 月 16 日 14:16 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/19 "2021-09-16T14:16:27Z")

</div>

> [@kinetiksoft](#):
>
> 我们是否需要按每日或其他频率执行此类查询？

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

> [@kinetiksoft](#):
>
> 问题是，我们的用户组每天都会更新，并且每当用户在主网站上的订阅状态发生变化时也会更新。

我明天将检查替代方案。

---

<div class="post-metadata">

### Author: ![kinetiksoft](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/kinetiksoft/32/229578_2.png) [@kinetiksoft](https://meta.discourse.org/u/kinetiksoft)
#### Post date: [2021 年9 月 16 日 14:17 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/20 "2021-09-16T14:17:27Z")

</div>

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

---

<div class="post-metadata">

### Author: ![vinothkannans](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vinothkannans/32/86465_2.png) [@vinothkannans](https://meta.discourse.org/u/vinothkannans)
#### Post date: [2021 年9 月 17 日 11:46 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/23 "2021-09-17T11:46:34Z")

</div>

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

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

```ruby
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)

```

---

<div class="post-metadata">

### Author: ![kinetiksoft](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/kinetiksoft/32/229578_2.png) [@kinetiksoft](https://meta.discourse.org/u/kinetiksoft)
#### Post date: [2021 年9 月 17 日 11:58 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/24 "2021-09-17T11:58:03Z")

</div>

嘿 @vinothkannans，

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

---

<div class="post-metadata">

### Author: ![vinothkannans](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vinothkannans/32/86465_2.png) [@vinothkannans](https://meta.discourse.org/u/vinothkannans)
#### Post date: [2021 年9 月 17 日 13:06 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/25 "2021-09-17T13:06:06Z")

</div>

[https://github.com/discourse/discourse/pull/14367](https://github.com/discourse/discourse/pull/14367)

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

---

<div class="post-metadata">

### Author: ![kinetiksoft](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/kinetiksoft/32/229578_2.png) [@kinetiksoft](https://meta.discourse.org/u/kinetiksoft)
#### Post date: [2021 年9 月 17 日 13:10 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/26 "2021-09-17T13:10:40Z")

</div>

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

---

<div class="post-metadata">

### Author: ![vinothkannans](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vinothkannans/32/86465_2.png) [@vinothkannans](https://meta.discourse.org/u/vinothkannans)
#### Post date: [2021 年9 月 17 日 13:24 UTC](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293/27 "2021-09-17T13:24:12Z")

</div>

升级后可以运行该命令。

[Next page](https://meta.discourse.org/t/user-flair-remains-after-user-is-removed-from-group/197293.md?page=2)
