Валидация имени пользователя в Unicode (Russian) случайным образом не проходит

Имена пользователей с русскими символами, например фыв (не уверен, зависит ли это от конкретных символов), иногда не проходят валидацию.

Протестировано в последних версиях Chrome и Firefox на Ubuntu 19.10, версия Discourse — 2.4.0.beta8 (16de46f8d4).

Похоже, что HTTP-запрос для этих трёх символов всегда одинаковый; это можно воспроизвести многократно в консоли DevTools:

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

Пытался установить белый список юникода [йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёЁ], но это не помогло.

@gerhard, есть какая-то идея, что здесь происходит? Наше регулярное выражение для русского языка неверно?

Мне не удалось воспроизвести проблему. Не исключено, что вы ввели какой-то невидимый пробел или что-то подобное, когда появилось сообщение об ошибке «должно содержать только цифры, буквы, дефисы, точки и подчеркивания»? Проверка имени пользователя выполняется на сервере, поэтому, если бы проблема была в регулярном выражении, для одного и того же ввода всегда генерировались бы одинаковые результаты.

2 лайка

Да, именно поэтому это странно.

Я думал, что это может быть связано с каким-то ограничением частоты запросов, но теперь я получаю ошибку даже после долгой паузы (2 минуты) при первом запросе, а затем успех на третьем запросе через несколько секунд.

Я могу воспроизвести это, выполнив код выше в DevTools.

Мне всё ещё не удаётся воспроизвести проблему. Не могли бы вы попробовать отключить и снова включить настройку сайта unicode usernames? Возможно, воркер unicorn не получил уведомление об изменении этой настройки. Это могло бы объяснить, почему ошибка возникает только при некоторых запросах. Если это не поможет, попробуйте пересобрать контейнер приложения.

2 лайка

Это не помогло, но да, я тоже не могу воспроизвести это в моём локальном экземпляре Docker, и, похоже, проблема исчезла после перезапуска при обновлении Discourse.

Кстати, если кто-то ищет более простой способ добавить русские буквы в белый список, похоже, что работает такое регулярное выражение: [\p{Cyrillic}]

1 лайк