合并用户账户

:bookmark: 本指南介绍如何将多个用户账户合并为单个 Discourse 账户。内容包括通过 Discourse 界面合并非工作人员(Non-staff)用户,以及通过控制台合并工作人员(Staff)用户。

:person_raising_hand: 所需用户权限:管理员

在 Discourse 中合并用户账户可以将多个账户合并为一个。这在以下几种场景中非常有用:

  1. 当用户创建了多个账户时(例如忘记了之前的注册信息)。
  2. 如果用户使用新的电子邮件地址创建了新账户,而没有更新现有账户的电子邮件。
  3. 当用户希望将用于不同目的(例如个人、工作或测试)的多个账户整合到一个账户中时。

合并非工作人员用户

管理员可以直接通过 Discourse 界面合并非工作人员用户。

:warning: 此操作不可逆。合并后,源用户账户将被删除。

要合并两个非工作人员用户:

  1. 导航到源用户(即你要从中合并的账户)的用户管理页面。
  2. 滚动到页面底部。
  3. 点击“合并”(Merge)按钮。
  4. 在第一个弹出窗口中,输入目标账户(即你要合并到的账户)的用户名,然后点击“转移并删除”(Transfer & Delete)。
  5. 将出现确认对话框。输入显示的确认文本(例如 transfer @source to @target),然后点击“转移并删除”(Transfer & Delete)以启动合并。

:information_source: 合并大型账户可能消耗大量资源,具体处理时间取决于源用户关联的数据量。

哪些内容会被合并?

合并用户账户时,Discourse 会组合来自 50 多个表的数据,包括:

  • 帖子和主题
  • 发送和收到的点赞
  • 私信
  • 用户个人资料信息
  • 用户偏好和设置
  • 用户操作和活动(例如书签、主题浏览记录)
  • 徽章和成就
  • 信任级别和组成员身份
  • 关联账户(例如社交登录)

在发生冲突的情况下,将保留目标用户的详细信息。如果两个用户都关联了匿名用户,源用户拥有的那个将丢失。

:warning: 引用源用户的传入链接(例如 https://discourse.example.com/t/some-topic/17/3?u=source_username)在合并后不会关联到目标用户。

关于合并用户和 DiscourseConnect 的重要说明

合并用户账户可能会根据实现方式对 DiscourseConnect(前身为 SSO)产生影响:

  • 如果 DiscourseConnect 基于电子邮件地址,只要 DiscourseConnect 系统中使用的是目标账户的电子邮件,就不会出现问题。请注意,合并后源用户的电子邮件将成为目标账户的次要电子邮件,如果之后使用该电子邮件通过 DiscourseConnect 登录,可能会导致登录问题。如有必要,建议在合并后删除次要电子邮件。
  • 如果 DiscourseConnect 系统使用的是与 Discourse 用户 ID 不同的唯一用户 ID,如果源账户的唯一 ID 未正确映射到目标账户,合并可能会导致问题。

合并工作人员用户

出于安全原因,合并工作人员用户必须通过控制台进行。

:information_source: 如果你的站点由 Discourse 托管,请联系 team@discourse.org 获取合并工作人员用户的帮助。

要通过控制台合并工作人员用户:

root@host:/var/discourse# ./launcher enter app
root@host-app:/var/www/discourse# rake users:merge['source_username','target_username']

Users merged!

root@host-app:/var/www/discourse#

:warning: 确保命令中逗号前后没有空格。

常见问题

问:如果合并过程似乎停滞了怎么办?
答:如果合并进度屏幕在很长一段时间内没有变化,请尝试刷新页面。合并可能已经完成,但界面未更新。

问:我可以撤销用户合并吗?
答:不可以,一旦两个用户合并,该操作无法撤销。合并后,源用户账户将被永久删除。

问:合并用户会影响他们的帖子和主题吗?
答:源用户的所有帖子和主题都将转移到目标用户。这些内容的作者身份将更改,以反映目标用户为创建者。

10 个赞

帖子已拆分为新主题:我的网站上的合并用户按钮消失了

我们还发现了与合并和 SSO 相关的另一个棘手情况。

  1. 用户使用 first.last@organizationA.com 的电子邮件地址在 Organization A 创建了一个 SSO 帐户
  2. 用户转移到 Organization B 并使用 first.last@organizationB.com 的电子邮件地址创建了一个 SSO 帐户
  3. 我们合并了这两个帐户
    1. 用户的首要电子邮件地址现在是 first.last@organizationB.com
    2. 但是,合并过程会将 first.last@organizationA.com 留作辅助电子邮件地址
  4. 用户返回 Organization A,他们尝试使用 first.last@organizationA.com 通过 SSO 登录,然后他们陷入以下登录循环,并出现此 Discourse 消息:慢点,您发出的请求太多了

为了修复,我们在第 3 步中从帐户的辅助电子邮件地址中删除了 first.last@organizationA.com。这创建了另一个帐户,然后我们将其与 first.last@organizationB.com 帐户合并。

我们还调整了我们的合并流程,以便在合并后,我们立即从帐户中删除辅助电子邮件地址。

1 个赞

为什么会这样?(为什么它们不直接合并呢?)

我一直在看关于如何合并账户的教程,但在论坛里,我是管理员,那个合并按钮却没有出现在“匿名化用户”按钮旁边?:man_shrugging:

在合并账户时,会保留哪一个?如何确保保留的是正确的那个?合并操作是从你想要丢弃的账户发起,还是从你想要保留的账户发起?

按照上述术语,"源"用户将被删除,其帖子等内容会转移给"目标"用户。我前几天第一次操作时,一切都很顺利。

2 个赞