新的 Wordpress 用户连接到现有的 Discourse 用户

@jord8on,Discourse 上的匹配方式是,它首先尝试匹配外部 ID(在您更改 WordPress 数据库后,它现在指向不同的用户),然后尝试使用电子邮件地址进行匹配。使用 ID 作为首要匹配项有一些很好的理由。电子邮件并不是一个好的去中心化标识符。

所以您需要做的是删除在使用旧 WordPress 数据库时创建的 Discourse 中的单点登录记录。您可以使用日期时间来识别它们,例如,您可以在 Discourse 实例上执行以下操作:

./launcher enter app
rails c
SingleSignOnRecord.where("created_at < ?", 1.month.ago) // 检查这是否符合您的预期
SingleSignOnRecord.where("created_at < ?", 1.month.ago).delete_all

导入到新数据库的旧用户将根据电子邮件与他们现有的 Discourse 帐户进行匹配(因为他们新的 WordPress ID 将不会匹配任何 SSO 记录)。

我还建议删除 WordPress 中所有的 discourse_username 数据,并让它通过用户 webhook 自动重新同步。您需要运行此命令(可能使用 WP CLI),它会删除 discourse_username 元字段的所有条目。

delete_metadata( 'user', 0, 'discourse_username', '', true );

对于将来阅读此内容的人来说,如果您使用 DiscourseConnect 和一个 WordPress 数据库,然后迁移到一个全新的 WordPress 数据库而没有进行迁移,您将会遇到这类问题。在进行此类更改之前,您应该寻求帮助。

2 个赞