我最近将一个网站迁移到了 Discourse。我没有意识到的是,许多用户的用户名都已更改,并且新的用户名似乎使用了他们电子邮件地址的一部分。我以前迁移时从未见过用户名更改。如何恢复此设置?
如果已经上线,那么更改起来会比较困难,不过原始用户名应该在用户自定义字段中。您真的应该在测试阶段解决这些问题。
除非迁移脚本有问题,否则用户名被更改的原因是它们与 discourse 用户名格式不兼容。
有哪些用户名被更改了?您是从什么迁移过来的?
感谢您的回复,Jay。我们不得不将网站置于维护模式以进行这些更正。用户名和姓名列被更改很奇怪。我们正在研究如何交换它们。这非常令人困惑……
您可以查看 UserCustomField.where(user_id: some_id) 来了解该用户存在哪些自定义字段,其中应包含其原始用户名。
我们已成功交换。但交换后,配置文件无法打开!它显示“哎呀,未找到页面”。
只是为了再次确认,您在重新映射用户名后刷新了页面,对吗?在您重新加载之前,Discourse 仍将在客户端使用旧名称,因此如果您重新映射了名称但未重新加载,它将尝试打开不再存在的用户配置文件。
谢谢。我们会对此进行检查。
另外,我不明白它如何自动分配电子邮件地址的前半部分。
该平台允许用户使用空格和特殊字符创建个人资料名称,并在 URL 中使用 userID。
我们可以在 URL 中使用 userID 并按原样迁移包含空格和特殊字符的个人资料名称吗?
我们发现 sim 的用户名和名称是相同的。
我们意识到有些名称现在包含空格。
如果我们交换用户名和名称部分,那么 Discourse 可能会为不符合个人资料名称指南的那些用户分配一半的电子邮件 ID 作为用户名。
而且,为什么 Discourse 要使用电子邮件地址?安全风险
不可以。Discourse 不允许用户名包含空格或(大多数)特殊字符。这就是它们被重写的原因。
我不明白你说的关于 URL 的话。
它必须使用某些东西来生成用户名。
它是这样做的:
UserNameSuggester.suggest(
opts[:username].presence || opts[:name].presence || opts[:email],
所以如果你没有用户名或姓名,它就会回退使用电子邮件地址的第一部分。
所以我们可以把它改成别的?或者移除电子邮件 ID 作为选项?