phpBB3迁移到WP/Discourse的用户数据损坏

偶尔,似乎在从我们旧的 phpBB3 网站导入用户数据后,我们会遇到一个问题,即一些用户数据在 WP 到 Discourse 的同步过程中与其他用户的数据损坏。这种情况并不经常发生,也无法按需重现,这不幸导致我们的开发团队在很大程度上将其视为一个问题。

在第一种情况下,我的一个测试用户帐户在导入数据后被删除,但该测试用户的头像随后被分配给另一个用户的个人资料,并在导入完成后我以该用户的身份登录。

在第二种情况下,我在 WP 中注册了一个测试用户,当与 Discourse 同步发生时,该测试用户占用了 Discourse 中现有用户的用户名以及他们的一些自定义个人资料和群组数据。请看截图……

在这两种情况下,Discourse 中的重复用户都参与了测试用户的帐户损坏。例如 agmolnar 和 agmolnar1 以及 tbm960c 和 tbm960c1。

我们有许多这样的重复用户,我猜想这些用户很可能来自导入的 phpBB3 数据文件中的匿名用户。

以前有人遇到过类似的情况吗?或者有什么关于问题可能是什么的线索吗?在进行新的导入之前,让我们的团队清理 phpBB3 导入文件中的匿名用户是否值得?

感谢任何建议。

你好 Ryan,

你可以看看这些文件,看看能否找到一些有用的信息:

还有:

以及:

也许你可以修改这部分,不要导入匿名用户,或者找到一些能导致你奇怪问题的线索。

感谢 Coin-coin。如果我们先从用户数据文件中清除匿名用户再导入,我假设所有匿名帖子都会像现在一样分配给“system”用户。是否有我不知道的原因要阻止我们的 phpBB 实例中的匿名用户出现在导入文件中?

我从这个和其他帖子中了解到,例如……

我们遇到的问题似乎与匿名用户有关,这些用户本质上是 WordPress 中不存在的重复用户,WordPress 的全新导入更改了 WordPress 用户 ID 的结构,但没有更改 Discourse ID,因为它消除了新创建的 WordPress 测试用户,并且 Discourse 尝试首先通过外部 WordPress ID 关联用户。

当我们进行全新导入时,它会从数据库中删除一些 WordPress 测试用户。我搜索过的几个匿名 phpBB 用户的用户 ID 在 Discourse 中似乎都具有最高的整数用户 ID(4505、4506 等)。因此,似乎当我们进行全新导入并删除 WordPress 中的测试帐户时,新创建的 WordPress 用户会与现在不存在的旧测试用户的旧 ID 同步。

通过强制在全新导入期间通过电子邮件而不是外部 ID 匹配用户,如上面链接的第 5 篇帖子中所述,我们应该可以排除任何不希望的旧用户和新用户合并的可能性。

这一切听起来合理吗?

谢谢

这存在一个问题,即帖子归属给唯一用户的关联性将丢失,因此很难跟踪一个所有帖子似乎都来自单个 system 用户的对话——你将无法区分不同的参与者。

没错;从概念上讲,你可以保持现状,然后手动使用管理员用户配置文件界面来合并应该是同一个的用户,或者,你可以像你建议的那样,简单地将电子邮件作为外部 ID 发送,这将使新登录连接到具有匹配电子邮件地址的现有帐户。

后者显然是最容易的路径 :+1:

@kiefferr 我注意到您上传的图片中有一些细节,已将其移除,以防您不小心分享。如果需要,请随时重新上传图片。:slight_smile: :+1:

1 个赞

您是说您同时运行 discourse 和 phpbb3 社区,并定期从 phpbb3 导入数据吗?

目前看起来是这样,因为我们开发新的 WP/Discourse 网站的进度拖延了,但没有,Discourse 仍在开发中。我们正在替换一个围绕 phpbb3 构建的自定义网站。

我们进行了首次导入,然后决定在最终导入上线前再进行一次测试导入。我很高兴我们这样做了,因为我不想在上线后才去处理这些 bug。

1 个赞

大家好,我有一个后续问题,如果您愿意,请告知。我与开发团队分享了上述关于在最终导入/迁移上线前强制用户通过电子邮件而非外部 ID 进行匹配的发现,以及删除 SSO 记录以便干净地重新传播。

但他们现在似乎认为原始的 phpBB3 导出数据有问题,即该数据中存在重复/匿名用户,并且一些 phpBB 用户没有关联的电子邮件。以下内容似乎都是 Discourse 应该能够处理的 phpBB3 数据导入问题。我错了吗?特别是关于 Discourse 如何为匿名用户分配虚构用户名的方面,这是标准操作流程。

如果我们确实需要从当前的 phpBB3 安装中获取更干净的数据,我们或许可以做到。但似乎我们不需要也不应该去修改 phpBB 数据。这并不是真正的问题所在。

我们执行了 Discourse 的新安装,并成功导入了 phpBB 数据。

以下是我们的发现:

  • “…”_users" 表共有 3270 条记录。
  • 下载 Discourse 中导入的用户后,我们发现 Discourse 中有 3251 位用户。
  • 在分析过程中,我们发现一些用户的 Discourse 用户名后面附加了“1”,这实际上源自他们在 phpBB 数据中的用户名。只有一个特定用户是“redacted_username1”,该用户在 phpBB 数据中不存在。但是,“redacted_username”用户存在于 phpBB 数据中。
  • Discourse 用户名“edacted_username1”关联的电子邮件是“anonymous_52996ba94025464fdf3e5f3ae131bdf5@no-email.invalid”。这表明用户名“redacted_username”已被匿名用户占用,然后该用户在其用户名后添加了“1”。
  • 为防止将来导入时发生此类情况,我们需要获取不包含匿名和其他不受欢迎用户的最新数据。
  • phpBB 和 Discourse 之间的用户数差异为 19。在 phpBB 数据中,有 53 位用户在其账户中缺少关联的电子邮件。
  • 在 Discourse 中搜索“anonymous”用户时,会返回 32 位拥有匿名电子邮件且当前被暂停的用户。这些匿名用户的用户名在 phpBB 数据中找不到。这表明 Discourse 正在为匿名用户分配虚构用户名,这可能会导致未来的错误。
  • 总结来说,19 位没有电子邮件的用户未被导入,而 32 位用户被同步为具有虚构用户名的匿名电子邮件。
  • 请提供干净的 PHPBB 数据以便我们导入。
  • 此外,如果您对此有任何想法,请告知我们。

除非您要从数据库中删除这些用户,否则我会修改脚本以忽略这些用户。获取部分转储可能不容易重复。

如果您可以从当前站点删除这些用户,那似乎是个不错的解决方案。在您遇到的类似情况下,我的偏好是直接读取实时数据库,而不是反复传输转储。

1 个赞