重命名用户时出现问题,包含 Unicode 字符

重命名用户时遇到问题,无法将其重命名回旧用户名(我从 phpBB 导入并不得不重命名一些用户,例如将 Möp 重命名为 Moep)。尝试重命名用户时出现 500 错误,并且在重新加载用户后,用户名仍然没有变音符号。有什么想法吗?Unicode 设置已启用,允许使用变音符号,并且还启用了“外部系统头像”。

您需要查看日志文件,看看里面有什么。您可能会在 /logs 中找到,也可能需要查看 /var/discourse/shared/standalone/log/rails/production.log(我认为是 log 而不是 logs)。

2 个赞

啊,谢谢。我不知道是否有日志文件以及在哪里可以找到它们。现在我知道了。 :slight_smile:

找到了这个:

Started PUT "/users/moep/preferences/username" for xxxx:c5:9f0d:4c00:xxxx:e179:xxxx:xxxx at 2022-11-23 15:53:52 +0000
Processing by UsersController#username as */*
  Parameters: {"new_username"=>"Möp", "username"=>"moep"}
Completed 500 Internal Server Error in 338ms (ActiveRecord: 0.0ms | Allocations: 137204)
Encoding::CompatibilityError (incompatible character encodings: ASCII-8BIT and UTF-8)
app/models/user.rb:1806:in `username_validator'
app/services/username_changer.rb:35:in `change'
app/services/username_changer.rb:13:in `change'
app/controllers/users_controller.rb:202:in `username'

还有更多,但我认为这可能足够了。如果不够,我可以提供更多。

顺便说一句,我尝试了多个用户名,遇到了类似的问题。

1 个赞

@pfaffman 你能从我的日志中看到我收到 500 错误的原因吗?:slight_smile:

用户名中的字符不被喜欢。我不知道为什么。

我刚刚测试了将用户名从“moep”重命名为“Möp”,并且成功了。

  • 您正在使用哪个版本的 Discourse?
  • 这是标准安装吗?
  • 您的 Discourse 前面是否有某种反向代理?
  • 您正在使用哪个浏览器?
  • allowed_unicode_username_characters 设置的值是什么?
  • 在 rails 控制台中重命名是否有效?
    ./launcher enter app
    rails c
    
    user = User.find_by_username("moep")
    new_username = "Möp"
    UsernameChanger.change(user, new_username, Discourse.system_user)
    
2 个赞

最新版本。目前应该是 2.9.0.beta12。

是的。我只是重命名了容器名称,因为我计划运行多个 Discourse 实例。但目前只有一个在运行。

Apache 2.4

Chrome、Brave。

[äöüßÄÖÜẞ]

也无效:

=> "Wägi"
[6] pry(main)> UsernameChanger.change(user, new_username, Discourse.system_user)
Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8
from /var/www/discourse/plugins/discourse-migratepassword/plugin.rb:78:in `+'

这里我尝试将“Waegi”重命名为“Wägi”。

我注意到:我为容器使用了一个新的模板版本,其中包含以下信息:

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  DISCOURSE_DEFAULT_LOCALE: de

在旧模板(大约 2019 年)中只有:

env:
  LANG: en_US.UTF-8
  DISCOURSE_DEFAULT_LOCALE: de

这是否可能与问题有关?这些设置是否适合以德语为主要语言的 Discourse 安装?

哦,我现在注意到错误是由 discourse-migratepassword 抛出的——这也是我在将 phpBB 导入 Discourse 之前重命名用户的原因。

禁用 discourse-migratepassword、重命名用户然后再启用它是否有用?discourse-migratepassword 在从 phpBB 导入后还需要激活才能处理其他什么?

2 个赞

discourse-migratepassword 插件似乎与 Unicode 用户名不兼容。
cc @michaeld

是的,禁用该插件应该可以为您解决此问题。

它在导入期间没有用,只在导入 之后 有用,因为它允许您的用户使用旧密码登录。

2 个赞

好的,谢谢。所以我会禁用它,重命名用户,然后立即重新启用它。再次感谢! :slight_smile:

1 个赞

禁用然后重命名用户奏效了。再次感谢您。:slight_smile:

我想知道:现在用户是否可以使用旧的 phhBB 密码登录(因为 discourse-migratepassword 似乎存在此 Unicode 问题),即使他们的用户名包含变音符号?

1 个赞

我敢肯定,他们第一次登录时,密码就会被保存为 Discourse 密码,所以你不再需要它了。听起来,任何将使用导入密码登录的人都已经登录过了。

1 个赞

我无法重现此问题。Unicode 和允许字符的设置相同,我甚至创建了一个具有相同用户名的用户并将其重命名为 Möp。应该还有其他我不知道的原因导致此问题出现?

1 个赞

奇怪。我尝试过的每个用户名都出现了这个问题。作为 Unicode 字符,我只有德语的变音符号,如 äöü。另一个例子是:Waegi 改为 Wägi

这个问题最初出现在 phpBB3 导入到 Discourse 的脚本中,这也是我重命名 phpBB 中所有带变音符号的用户名然后重新启动导入脚本的原因。当然,我希望用户在 Discourse 中仍然使用他们原来的用户名。

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.