Unicode文字でユーザー名を変更する際の問題

ユーザー名を古いユーザー名に戻すのに問題があります(phpBBからインポートし、一部のユーザー名を変更する必要がありました。例:MöpをMoepに変更)。ユーザー名を変更しようとすると500エラーが発生し、リロードしてもウムラウトのない名前のままです。何か考えはありますか?Unicode設定は有効になっており、ウムラウトは許可されており、「外部システムアバターを有効にする」も有効になっています。

ログを確認して、何があるか確認する必要があります。/logs にあるか、/var/discourse/shared/standalone/log/rails/production.log を確認する必要があるかもしれません(logs ではなく log だと思います)。

「いいね!」 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 設定の値は何ですか?
  • レールコンソールでの名前変更は機能しますか?
    ./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インスタンスを実行する予定なので。しかし、現時点では1つしか実行されていません。

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 を無効にし、ユーザーの名前を変更してから再度有効にすることは有益でしょうか?phpBBからのインポート後に discourse-migratepassword がアクティブである必要があるのは、他に何が処理されますか?

「いいね!」 2

discourse-migratepassword プラグインは Unicode ユーザー名と互換性がないようです。
cc @michaeld

はい、プラグインを無効にすると、この問題は解決するはずです。

インポート中には役に立ちませんが、インポート後には、ユーザーが古いパスワードでログインできるようになるため、役に立ちます。

「いいね!」 2

わかりました、ありがとうございます。では、無効にして、ユーザー名を変更してから、すぐに再度有効にするということですね。重ねて感謝いたします!:slight_smile:

「いいね!」 1

無効化してからユーザー名を変更することでうまくいきました。改めて感謝します。:slight_smile:

疑問なのですが、ウムラウト付きのユーザーは、discourse-migratepassword にこの Unicode 問題があるように見えるため、古い phhBB パスワードでログインできるようになりましたか?

「いいね!」 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.