Punto esclamativo e caratteri speciali nei nomi utente

Ciao.

Stiamo spostando una grande community su Discourse da vb3.
Molti nomi utente - circa 1.200 - contengono il punto esclamativo “!” e non sono riuscito a trovare alcuna opzione per riabilitarlo.
Abbiamo già abilitato “nomi utente unicode” senza successo.
Esiste una soluzione pronta per questo problema?

Grazie!

1 Mi Piace

No. Cambiare i caratteri legali nei nomi utente non è una vera opzione. Penso che dovranno avere nomi utente meno entusiasmanti.

Wow, sembra una svista non da poco… c’è una spiegazione tecnica per questo? Potremmo risolvere questo problema con un plugin o un fork?

Non ho preso io la decisione, ma ci sono molti sistemi per cui un ! non è un carattere valido per un nome utente. È molto probabile che se provassi a consentirlo in un plugin (o in una fork, che sarebbe un’idea molto, molto brutta se volessi mai più aggiornare Discourse), sarebbe difficile.

Il ! ha significati speciali in diversi contesti e sospetto che se cambiassi semplicemente il validatore del nome utente, un sacco di altre cose si romperebbero.

Capisco. È comunque qualcosa che dovrebbe essere affrontato. Tutte le altre soluzioni BB consentono quel carattere nel nome utente ed è comune nelle community di gioco. Il nome utente e l’ID utente dovrebbero essere mantenuti come entità separate per non avere tali limitazioni. Abbiamo circa 95.000 membri e contattare 1.200 di loro per cambiare il proprio nome utente sarà una vera seccatura. Grazie comunque per l’aiuto!

1 Mi Piace

Ho fatto dozzine, forse più di cento importazioni. Presto molta attenzione alle persone che chiedono informazioni sulle importazioni qui. Questa è la prima volta che ricordo qualcuno che si lamenta di questo.

Puoi dire a tutti di provare sia il loro nome utente che il loro indirizzo email (molti di loro non lo sapranno nemmeno). È una buona scommessa che tu abbia altri nomi utente che sono cambiati.

Questo ti darà tutti i nomi utente che sono cambiati:

UserCustomField.where(name: 'import_username').pluck(:value)
2 Mi Piace

Ho trovato un paio di argomenti:

https://meta.discourse.org/t/username-restrictions/126664

Probabilmente sarà molto più di semplici punti esclamativi. Sembra una limitazione così strana, dato che puoi usare quei caratteri ovunque altro.

Comunque, grazie per il tuo aiuto.

1 Mi Piace

Vale la pena sottolineare che nomi e nomi utente non sono la stessa cosa. I nomi utente vengono utilizzati nei percorsi degli URL, ad esempio:

https://meta.discourse.org/u/pfaffman/summary

Un punto esclamativo non è un carattere valido in un URL, mentre caratteri come ? & hanno scopi speciali nella struttura dell’URL e quindi non possono far parte di un nome utente. Questo non è specifico di Discourse, qualsiasi sistema che utilizza il nome utente nella struttura dell’URL deve rispettarlo.

Un nome utente non può contenere un punto esclamativo, ma il nome può farlo, cosa che puoi dare priorità nell’interfaccia utente.

3 Mi Piace

ha perfettamente senso @Stephen, grazie per aver chiarito.

Penso che potremmo semplicemente modificare lo script di importazione per fare qualcosa del genere:

username_original = username
username = @htmlentities.decode(user["username"]).strip

{
          id: user["userid"],
          name: username_original,
          username: username,
          password: password,
[...}

E nelle impostazioni di Discourse abilitare la priorità per il nome utente “name”, se presente, rispetto allo username.

3 Mi Piace

Oltre a ciò, i nomi utente sono destinati all’uso nelle @menzioni, quindi ci si aspetta che i nomi utente siano semplici e facili da digitare; ecco perché consentiamo solo caratteri ASCII per impostazione predefinita (anche se ciò può essere esteso all’unicode tramite l’impostazione unicode_usernames, ma ancora senza punteggiatura).

Nota che questo script di migrazione utilizza la classe base dello script di migrazione non di massa, che fa questo con ogni record utente generato dal metodo a cui hai collegato:

che rimuove eventuali caratteri non validi dai nomi utente.

Ci sono molti punti nel codice che danno per scontate determinate cose sui nomi utente (parsing di @menzioni, modifica dei nomi utente, ecc.), motivo per cui imponiamo queste restrizioni.

Come dice Stephen, i nomi utente non sono il posto dove mostrare la personalità dell’utente; i campi nome e flair lo sono :slight_smile:

7 Mi Piace

Ci sono ancora parecchi casi limite che sono difficili da gestire in questo modo.
I nomi non sono univoci, se diamo priorità nel layout al nome potete immaginare come andrebbe in una bacheca piena di adolescenti immaturi che giocano e trollano tutto il giorno :slight_smile:

Va benissimo dire che potrebbe essere un problema a bassa priorità, tuttavia è qualcosa che chiaramente potrebbe beneficiare di qualche riflessione e lavoro e certamente non è una “funzionalità” o qualcosa che dia un vantaggio rispetto alla possibilità di scegliere un nome univoco senza forti limiti come qualsiasi altro software bb che esiste da tempo.

1 Mi Piace

Se l’utente fosse pfaffman! l’URL sarebbe solitamente:
https://meta.discourse.org/u/pfaffman!/summary
Almeno, qualsiasi altro CMS su cui abbia mai lavorato funzionava in questo modo

1 Mi Piace

Oh, bello! Arte pregressa. :+1:

Ti dispiacerebbe condividere alcuni dei progetti CMS open source che hai utilizzato? Possiamo dare un’occhiata e vedere come gestiscono i permalink e i riferimenti utente, imparare dai loro sforzi. :slight_smile:

Anche se… mi chiedo se i Sistemi di Gestione dei Contenuti siano esattamente nello stesso contenitore dei Forum della Community? :thinking:

“vb3” si riferisce a vBulletin?

Inoltre, la menzione dei caratteri speciali che vengono codificati non è qualcosa di unico dei CMS, è semplicemente una codifica standard: Percent-encoding - Glossary | MDN

1 Mi Piace

Ma allora come potremmo menzionare le persone, @Crius?!

:point_up: :smiley: :point_down:

Ma allora come potremmo menzionare le persone, @Crius?!

Dovremmo digitare @maiki!, per menzionare qualcuno con maiki! come nome utente? :thinking: Come funziona in vBulletin?

1 Mi Piace

vBulletin 3 non ha quelle funzionalità e vBulletin 5… non ho idea se abbia quella funzionalità dato che è un software chiaramente rimasto indietro in termini di funzionalità moderne.

Quando pinghi qualcuno su Discourse compare un suggerimento automatico. Non c’è bisogno di preoccuparsi di dover digitare il nickname completo.
Modifica: Alla fine significa decodificare l’elenco degli utenti prima di suggerirlo, se lo si desidera davvero, o codificare l’input (l’utente che scrive la parziale) in modo che possa cercare correttamente il nome utente.

Voglio dire, possiamo discutere su quanto lavoro e impegno ci voglia, ma non su “se” sia possibile.

In ogni caso, non so se sia solo il media a comunicare male l’umore, ma tutte queste risposte recenti sono sembrate un po’ “ostili”. Le persone vengono su meta.discourse per chiedere aiuto e suggerire cose da migliorare. Se non sei d’accordo, puoi semplicemente ignorare il thread e andare avanti.

Inoltre, ho dimenticato di aggiungere. Se ci sono PR aperte per Discourse, posso provare a lavorarci in un fork e aprire una PR. Certo, non sono uno sviluppatore Ruby, ma ho diversi anni di esperienza come ingegnere software / ingegnere di piattaforma. Sarò felice di provare a contribuire :slight_smile:

3 Mi Piace

Solo aggiorno per il futuro, ! non sono un elemento proibito negli URL come menzionato sopra. Non so da dove provenga questa idea.

Tuttavia, Ruby sembra usare ? e ! nelle sue funzioni, il che è una cosa strana ad essere onesti (almeno nei miei oltre 20 anni di ingegneria del software) ma ogni linguaggio ha le sue cose :slight_smile:

Il che potrebbe suggerire perché ! è proibito. Dovrò scavare più a fondo nel codice sorgente di discourse per capire se questo era un problema specifico che non poteva essere risolto o solo qualcosa che è stato eccessivamente proibito per evitare potenziali problemi tra nomi utente e ruby che impazziscono in alcuni casi limite.

3 Mi Piace

Mi dispiace per aver ripreso questa vecchia discussione, ma ho lo stesso problema e la mia ipotesi è che |, [ e ] siano anche caratteri illegali per i nomi utente e non possano essere abilitati in qualche modo?

Sto per migrare un vecchio forum di giochi da phpBB3 a Discourse e molti nomi utente sono come Clan|Nickname o [Clan]Nickname.

1 Mi Piace

Modificherei lo script per cercare quelli e sostituirli con un carattere legale come _ o -. Penso che li eliminerà semplicemente. Puoi guardare il codice del nome utente suggerito.

Quando ho migrato il mio primo forum a Discourse ho notato che i caratteri illegali, a partire dagli spazi vuoti, ma anche altri, venivano sostituiti da _. Ma in questo forum il carattere illegale più comune era lo spazio vuoto e non molto spesso, quindi non era il problema che potrebbe essere ora. Comunque, questo non può essere un ostacolo. Forse inserirò il vecchio nome utente nel campo del nome. Vedremo - quando avrò risolto l’altro problema che il mio container di importazione non si costruisce…