最近迁移到discourse导致用户名发生了变化!

我最近将一个网站迁移到了 Discourse。我没有意识到的是,许多用户的用户名都已更改,并且新的用户名似乎使用了他们电子邮件地址的一部分。我以前迁移时从未见过用户名更改。如何恢复此设置?

1 个赞

如果已经上线,那么更改起来会比较困难,不过原始用户名应该在用户自定义字段中。您真的应该在测试阶段解决这些问题。

除非迁移脚本有问题,否则用户名被更改的原因是它们与 discourse 用户名格式不兼容。

有哪些用户名被更改了?您是从什么迁移过来的?

5 个赞

感谢您的回复,Jay。我们不得不将网站置于维护模式以进行这些更正。用户名和姓名列被更改很奇怪。我们正在研究如何交换它们。这非常令人困惑……

1 个赞

您可以查看 UserCustomField.where(user_id: some_id) 来了解该用户存在哪些自定义字段,其中应包含其原始用户名。

2 个赞

我们已成功交换。但交换后,配置文件无法打开!它显示“哎呀,未找到页面”。

只是为了再次确认,您在重新映射用户名后刷新了页面,对吗?在您重新加载之前,Discourse 仍将在客户端使用旧名称,因此如果您重新映射了名称但未重新加载,它将尝试打开不再存在的用户配置文件。

2 个赞

谢谢。我们会对此进行检查。
另外,我不明白它如何自动分配电子邮件地址的前半部分。

1 个赞

该平台允许用户使用空格和特殊字符创建个人资料名称,并在 URL 中使用 userID。

我们可以在 URL 中使用 userID 并按原样迁移包含空格和特殊字符的个人资料名称吗?

我们发现 sim 的用户名和名称是相同的。
我们意识到有些名称现在包含空格。

如果我们交换用户名和名称部分,那么 Discourse 可能会为不符合个人资料名称指南的那些用户分配一半的电子邮件 ID 作为用户名。

1 个赞

而且,为什么 Discourse 要使用电子邮件地址?安全风险

不可以。Discourse 不允许用户名包含空格或(大多数)特殊字符。这就是它们被重写的原因。

我不明白你说的关于 URL 的话。

它必须使用某些东西来生成用户名。

它是这样做的:

UserNameSuggester.suggest(
        opts[:username].presence || opts[:name].presence || opts[:email],

所以如果你没有用户名或姓名,它就会回退使用电子邮件地址的第一部分。

1 个赞

所以我们可以把它改成别的?或者移除电子邮件 ID 作为选项?

1 个赞