Alex_P
(Alex P.)
1
包含俄语字符的用户名(例如 фыв,不确定是否取决于特定字符)有时会导致验证失败。
已在 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 白名单 [йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёЁ],但无效。
sam
(Sam Saffron)
2
@gerhard 你知道这里出了什么问题吗?是我们的俄语正则表达式不对吗?
gerhard
(Gerhard Schlager)
3
我无法复现该问题。当系统提示“只能包含数字、字母、连字符、点和下划线”的错误信息时,您是否可能输入了某种不可见的空白字符或其他类似内容?
用户名检查是在服务器端运行的,因此如果是正则表达式的问题,对于相同的输入,它应该始终生成相同的结果。
2 个赞
Alex_P
(Alex P.)
4
是的,这正是奇怪的地方。
我原以为这可能与某种速率限制有关,但现在即使我在第一次请求前等待了很长时间(2 分钟),仍然出现错误,而在几秒钟后的第三次请求却成功了。
我可以在 DevTools 中执行上述代码来复现该问题。
gerhard
(Gerhard Schlager)
5
我仍然无法复现该问题。能否请您尝试禁用并重新启用 unicode usernames 站点设置?可能是某个 Unicorn 工作进程未收到设置已更改的通知。这可以解释为何只有部分请求会出现错误。如果这没有帮助,请尝试重新构建应用容器。
2 个赞
Alex_P
(Alex P.)
6
这并没有帮助,但确实,我也无法在我的 本地 Docker 实例 中复现该问题,而且看起来在升级 Discourse 并重启后问题就消失了。
顺便一提,如果有人正在寻找更简单的方法来允许俄语字母,看起来这个正则表达式可以工作:[\p{Cyrillic}]
1 个赞