Ponto de exclamação e caracteres especiais em nomes de usuário

Olá.

Estamos em processo de migração de uma grande comunidade no Discourse do vb3.
Muitos nomes de usuário - cerca de 1.200 - contêm o ponto de exclamação “!” e não consegui encontrar nenhuma opção para reativá-lo.
Já ativamos “nomes de usuário unicode” sem sucesso.
Existe alguma solução pronta para este problema?

Obrigado!

1 curtida

Não. Alterar caracteres legais em nomes de usuário não é realmente uma opção. Acho que eles terão que ter nomes de usuário menos interessantes.

Uau, parece uma falha considerável… existe alguma explicação técnica para isso? Ou poderíamos resolver isso com um plugin ou um fork?

Não tomei a decisão, mas existem muitos sistemas para os quais um ! não é um caractere válido para um nome de usuário. É uma boa aposta que, se você tentasse permitir isso em um plugin (ou um fork, o que seria uma péssima, péssima ideia se você quiser atualizar o Discourse novamente), será difícil.

O ! tem significados especiais em vários contextos e suspeito que, se você apenas alterar o validador de nome de usuário, um monte de outras coisas quebrará.

Entendo. É algo que deveria ser abordado, no entanto. Todas as outras soluções de BB permitem esse caractere no nome de usuário e ele é comum em comunidades de jogos. O nome de usuário e o ID do usuário devem ser mantidos como entidades separadas para não ter tais limitações. Temos cerca de 95.000 membros e contatar 1.200 deles para mudar seus nomes de usuário será um verdadeiro incômodo. Obrigado pela ajuda de qualquer maneira!

1 curtida

Já fiz dezenas, talvez mais de cem importações. Presto muita atenção às pessoas que perguntam sobre importações aqui. Esta é a primeira vez que me lembro de alguém reclamando disso.

Você pode dizer a todos para tentarem tanto o nome de usuário quanto o endereço de e-mail (muitos deles não saberão disso também). É uma boa aposta que você tem outros nomes de usuário que mudaram.

Isso lhe dará todos os nomes de usuário que mudaram:

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

Encontrei alguns tópicos:

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

Provavelmente será muito mais do que apenas pontos de exclamação. Parece uma limitação estranha, já que você pode usar esses caracteres em qualquer outro lugar.

De qualquer forma, obrigado pela sua ajuda.

1 curtida

Vale a pena ressaltar que nomes e nomes de usuário não são a mesma coisa. Nomes de usuário são usados em caminhos de URL, por exemplo:

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

Um ponto de exclamação não é um caractere válido em uma URL, enquanto caracteres como ? & têm propósitos especiais na estrutura da URL e, portanto, também não podem fazer parte de um nome de usuário. Isso não é específico do Discourse, qualquer sistema que use o nome de usuário na estrutura da URL tem que respeitar isso.

Um nome de usuário não pode conter um ponto de exclamação, mas o nome pode, o que você pode priorizar na interface do usuário.

3 curtidas

faz todo o sentido @Stephen, obrigado por esclarecer.

Acho que poderíamos simplesmente alterar o script de importação para fazer algo como:

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

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

E nas configurações do discourse habilitar a prioridade para o “name” do usuário, se presente, sobre o username.

3 curtidas

Além disso, nomes de usuário são feitos para serem usados em @menções, e a expectativa é que os nomes de usuário sejam simples e fáceis de digitar; é por isso que permitimos apenas caracteres ASCII por padrão (embora isso possa ser expandido para unicode pela configuração unicode_usernames, ainda sem pontuação).

Note que esse script de migração usa a classe base do script de migração não em massa, que faz isso com cada registro de usuário gerado pelo método que você vinculou:

que remove quaisquer caracteres inválidos dos nomes de usuário.

Existem muitos lugares no código que assumem certas coisas sobre nomes de usuário (análise de @menção, alteração de nomes de usuário, etc.), que é o motivo pelo qual aplicamos essas restrições.

Como Stephen diz, nomes de usuário não são o lugar para mostrar a personalidade do usuário; os campos nome e flair são :slight_smile:

7 curtidas

Ainda existem muitos casos específicos que são difíceis de gerenciar dessa forma.
Os nomes não são exclusivos, se dermos prioridade no layout ao nome, você pode imaginar como isso seria em um fórum cheio de adolescentes imaturos que jogam e trollam o dia todo :slight_smile:

Está perfeitamente bem dizer que pode ser um problema de baixa prioridade, ainda assim é algo que claramente poderia usar alguma reflexão e trabalho e certamente não é um “recurso” ou algo que dê uma vantagem sobre poder escolher um nome exclusivo sem fortes limitações como qualquer outro software de fórum que existe há muito tempo.

1 curtida

Se o usuário for pfaffman! a URL normalmente seria:
https://meta.discourse.org/u/pfaffman!/summary
Pelo menos, qualquer outro CMS em que já trabalhei funcionava assim

1 curtida

Ah, legal! Arte prévia. :+1:

Você se importaria de compartilhar alguns dos projetos de CMS de código aberto que você usou? Podemos dar uma olhada neles e ver como eles lidam com os permalinks e referências de usuário, aprender com seus esforços. :slight_smile:

Embora… eu me pergunto se Sistemas de Gerenciamento de Conteúdo é exatamente o mesmo que Fóruns da Comunidade? :thinking:

“vb3” se refere a vBulletin?

Sim

Além disso, a menção de caracteres especiais sendo codificados não é algo exclusivo de CMS, é apenas codificação padrão: Percent-encoding - Glossary | MDN

1 curtida

Mas então, como mencionaríamos as pessoas, @Crius?!

:point_up: :smiley: :point_down:

Mas então, como mencionaríamos as pessoas, @Crius?!

Digitaríamos @maiki!, para mencionar alguém com maiki! como nome de usuário? :thinking: Como funciona no vBulletin?

1 curtida

O vBulletin 3 não tem esses recursos e o vBulletin 5… não tenho ideia se ele tem o recurso, pois é um software que claramente foi deixado para trás em termos de recursos modernos.

Quando você menciona alguém no Discourse, aparece uma sugestão automática. Não há necessidade de se preocupar em ter que digitar o apelido completo.
Edição: Eventualmente, isso significa decodificar a lista de nomes de usuário antes de sugerir, se você realmente quiser, ou codificar a entrada (o usuário que está escrevendo parcialmente) para que ele possa pesquisar o nome de usuário apropriadamente.

Quero dizer, podemos discutir quanto trabalho e esforço isso leva, mas não “se” é possível.

Em qualquer caso, não sei se é apenas a mídia que é ruim em transmitir o humor, mas todas essas respostas recentes pareceram meio “hostis”. As pessoas vêm ao meta.discourse para pedir ajuda e sugerir coisas para melhorar. Se você não concorda, pode simplesmente ignorar o tópico e seguir em frente.

Ah, esqueci de adicionar. Se houver PRs abertos para o Discourse, posso tentar trabalhar nisso em um fork e abrir um PR. Admito que não sou um desenvolvedor Ruby, mas tenho vários anos de experiência como engenheiro de software / engenheiro de plataforma. Terei prazer em tentar contribuir :slight_smile:

3 curtidas

Apenas atualizando para fins de registro, ! não são proibidos em URLs como mencionado acima. Não sei de onde veio essa noção.

No entanto, Ruby parece usar ? e ! em suas funções, o que é uma coisa estranha, para ser honesto (pelo menos em meus mais de 20 anos de engenharia de software), mas cada linguagem tem suas próprias coisas :slight_smile:

O que pode indicar por que ! é proibido. Terei que investigar mais a fundo o código-fonte do discourse para entender se este foi um problema específico que não pôde ser resolvido ou apenas algo que foi excessivamente proibido para evitar possíveis problemas entre nomes de usuário e ruby enlouquecendo em alguns casos extremos.

3 curtidas

Desculpe por reabrir este tópico antigo, mas tenho o mesmo problema e minha suposição é que |, [ e ] também são caracteres ilegais para nomes de usuário e não podem ser habilitados de alguma forma?

Estou prestes a migrar um antigo fórum de jogos do phpBB3 para o Discourse e muitos nomes de usuário são como Clan|Nickname ou [Clan]Nickname.

1 curtida

Eu editaría o script para procurar por eles e substituí-los por um caractere legal como _ ou -. Acho que ele simplesmente os removerá. Você pode olhar o código do nome de usuário sugerido.

Quando migrei meu primeiro fórum para o Discourse, notei que caracteres ilegais, começando com espaços em branco, mas também outros, foram substituídos por _. Mas neste fórum, o caractere ilegal mais comum era o espaço em branco e não muito frequentemente, então não foi o problema que pode ser agora. De qualquer forma, isso não pode ser um impedimento. Talvez eu insira o nome de usuário antigo no campo de nome. Veremos - quando eu resolver o outro problema de que meu contêiner de importação não é construído…