合并用户账户

:bookmark: 本指南介绍如何将多个用户账户合并为单个 Discourse 账户。内容包括通过 Discourse UI 合并非管理员用户,以及通过控制台合并管理员用户。

:person_raising_hand: 所需用户级别:管理员

在 Discourse 中合并用户账户允许您将多个账户合并为一个。此过程在以下几种场景中非常有用:

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

合并非管理员用户

管理员可以直接通过 Discourse UI 合并非管理员用户。

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

合并两个非管理员用户的步骤如下:

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

: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: 请确保命令中的逗号前后没有空格。

常见问题解答

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

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

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

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 帐户合并。

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