Validação de nome de usuário Unicode (Russo) falha aleatoriamente

Nomes de usuário com caracteres em russo, como фыв (não tenho certeza se depende de caracteres específicos), às vezes falham na validação.

Testado no Chrome e Firefox mais recentes no Ubuntu 19.10. A versão do Discourse é 2.4.0.beta8 (16de46f8d4).

Parece que a solicitação HTTP é sempre a mesma para esses 3 caracteres, reproduzida repetidamente várias vezes no Console do 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)

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

@gerhard você tem alguma ideia do que está acontecendo aqui? Nossa regex em russo está incorreta?

Não consigo reproduzir o problema. Há alguma chance de você ter digitado algum tipo de espaço em branco invisível ou algo assim quando a mensagem de erro “deve conter apenas números, letras, hífens, pontos e sublinhados” foi exibida?

A verificação do nome de usuário é feita no servidor, então, se houvesse um problema com a expressão regular, ela sempre geraria os mesmos resultados para a mesma entrada.

2 curtidas

Sim, é por isso que é estranho.

Eu pensei que pudesse estar relacionado a algum tipo de limitação de taxa, mas agora obtive o erro mesmo após uma longa pausa (2 minutos) na primeira solicitação e, em seguida, sucesso na terceira solicitação em alguns segundos.

Consegui reproduzir isso executando o código acima nas Ferramentas de Desenvolvedor.

Ainda não consegui reproduzir o problema. Você poderia tentar desativar e reativar a configuração do site unicode usernames? Talvez um worker do unicorn não tenha recebido a informação de que a configuração mudou. Isso explicaria por que apenas algumas das solicitações resultam em erro. Se isso não ajudar, tente reconstruir o container do aplicativo.

2 curtidas

Isso não ajudou, mas sim, eu também não consigo reproduzi-lo no meu instância local do Docker e parece que desapareceu após a reinicialização ao atualizar o Discourse.

A propósito, se alguém estiver procurando uma maneira mais simples de incluir letras russas na lista branca, parece que essa expressão regular funciona: [\p{Cyrillic}]

1 curtida