La validation du nom d'utilisateur Unicode (russe) échoue de manière aléatoire

Les noms d’utilisateur contenant des caractères russes, par exemple фыв (je ne suis pas sûr que cela dépende de caractères spécifiques), échouent parfois la validation.

Testé sur les dernières versions de Chrome et Firefox sous Ubuntu 19.10, la version de Discourse est 2.4.0.beta8 (16de46f8d4).

La requête HTTP semble toujours être la même pour ces 3 caractères, reproduite en les répétant plusieurs fois dans la console 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)

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

@gerhard as-tu une idée de ce qui se passe ici ? Notre expression rationnelle russe est-elle incorrecte ?

Je n’arrive pas à reproduire le problème. Auriez-vous saisi un espace invisible ou quelque chose de similaire lorsque le message d’erreur « ne doit contenir que des chiffres, des lettres, des tirets, des points et des underscores » s’est affiché ?

La vérification du nom d’utilisateur s’exécute sur le serveur. Par conséquent, s’il y avait un problème avec l’expression régulière, elle devrait toujours générer les mêmes résultats pour la même entrée.

2 « J'aime »

Oui, c’est pourquoi c’est étrange.

Je pensais que cela pouvait être lié à une sorte de limitation du débit, mais maintenant j’ai obtenu l’erreur même après une longue pause (2 minutes) sur la première requête, puis la réussite sur la troisième requête en quelques secondes.

Je peux le reproduire en exécutant le code ci-dessus dans les outils de développement.

Je ne parviens toujours pas à reproduire le problème. Pourriez-vous essayer de désactiver puis de réactiver le paramètre du site unicode usernames ? Il est possible qu’un worker unicorn n’ait pas été informé du changement de paramètre. Cela expliquerait pourquoi seule une partie des requêtes génère une erreur. Si cela ne fonctionne pas, essayez de reconstruire le conteneur de l’application.

2 « J'aime »

Cela n’a pas aidé, mais oui, je ne parviens pas non plus à reproduire le problème sur mon instance Docker locale. Il semble avoir disparu après un redémarrage lors de la mise à niveau de Discourse.

Au fait, si quelqu’un cherche un moyen plus simple de mettre les lettres cyrilliques sur liste blanche, il semble que cette expression rationnelle fonctionne : [\p{Cyrillic}].

1 « J'aime »