Unicode(ロシア語)ユーザー名の検証がランダムに失敗する

ロシア語の文字を含むユーザー名(例:фыв、特定の文字に依存するかどうかは不明)は、検証に失敗することがあります。

Ubuntu 19.10 上の最新バージョンの Chrome と Firefox でテストしました。Discourse のバージョンは 2.4.0.beta8 (16de46f8d4) です。

これらの 3 文字に対する HTTP リクエストは常に同じのようです。DevTools コンソールで複数回繰り返して再現しました。

fetch('/u/check_username?username=%D1%84%D1%8B%D0%B2\u0026email=', {headers: {'X-Requested-With': 'XMLHttpRequest'}}).then(r => r.json()).then(console.log)

Unicode ホワイトリスト [йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёЁ] を設定してみましたが、効果はありませんでした。

@gerhard ここはどうなっているのか分かる?ロシア語の正規表現が間違っているのか?

その問題は再現できませんでした。エラーメッセージ「数字、英字、ハイフン、ピリオド、アンダースコアのみ含める必要があります」と表示された際に、何か目に見えない空白文字などを入力された可能性はありませんか?

ユーザー名のチェックはサーバー側で実行されるため、正規表現に問題があった場合、同じ入力に対して常に同じ結果が生成されるはずです。

「いいね!」 2

はい、だからこそ奇妙なのです。

何かのレート制限に関連しているのではないかと考えましたが、今回は最初のリクエストで2分間の長い待機後にもエラーが発生し、その後数秒以内に3回目のリクエストで成功しました。

上記のコードをDevToolsで実行することで再現できます。

まだ問題を再現できていません。unicode usernames サイト設定を無効化してから再度有効化してみてください。もしかすると、設定変更の通知がユニコーンワーカーに届いていない可能性があります。それであれば、一部のリクエストのみエラーになる理由が説明できます。それでも改善しない場合は、アプリコンテナを再ビルドしてみてください。

「いいね!」 2

それは効果ありませんでしたが、はい、私の ローカル Docker インスタンス でも再現できません。Discourse のアップグレード時に再起動した後、問題が解消されたようです。

余談ですが、ロシア文字をホワイトリストに追加するより簡単な方法をお探しの場合は、この正規表現が機能するようです:[\p{Cyrillic}]

「いいね!」 1