Convalida nome utente Unicode (Russian) fallisce in modo casuale

I nomi utente con caratteri russi, ad esempio фыв (non sono sicuro se dipenda da caratteri specifici), a volte falliscono la validazione.

Testato nell’ultima versione di Chrome e Firefox su Ubuntu 19.10; la versione di Discourse è 2.4.0.beta8 (16de46f8d4).

La richiesta HTTP sembra essere sempre la stessa per questi tre caratteri, riproducibile ripetendoli più volte nella Console degli Strumenti per sviluppatori:

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

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

@gerhard hai idea di cosa stia succedendo qui? Il nostro regex russo è errato?

Non riesco a riprodurre il problema. C’è la possibilità che tu abbia inserito qualche tipo di spazio invisibile o qualcosa di simile quando è apparso il messaggio di errore “deve contenere solo numeri, lettere, trattini, punti e trattini bassi”?

Il controllo del nome utente viene eseguito sul server, quindi se ci fosse stato un problema con l’espressione regolare, avrebbe dovuto generare sempre gli stessi risultati per lo stesso input.

2 Mi Piace

Sì, è per questo che è strano.

Pensavo che potesse essere legato a una sorta di limitazione della frequenza, ma ora ho ricevuto l’errore anche dopo una lunga pausa (2 minuti) sulla prima richiesta, e poi il successo sulla terza richiesta in pochi secondi.

Posso riprodurlo eseguendo il codice sopra negli Strumenti per sviluppatori.

Non riesco ancora a riprodurre il problema. Potresti provare a disabilitare e riabilitare l’impostazione del sito unicode usernames? Forse un worker unicorn non ha ricevuto la notizia del cambiamento dell’impostazione. Questo spiegherebbe perché solo alcune richieste generano un errore. Se ciò non risolve il problema, prova a ricostruire il contenitore dell’applicazione.

2 Mi Piace

Non ha funzionato, ma sì, non riesco nemmeno a riprodurlo nella mia istanza Docker locale e sembra che sia scomparso dopo il riavvio durante l’aggiornamento di Discourse.

A proposito, se qualcuno sta cercando un modo più semplice per inserire le lettere russe nella whitelist, sembra che questa espressione regolare funzioni: [\p{Cyrillic}]

1 Mi Piace