Skip to content

fix(auth): let people register under their own name - #1228

Closed
ninja14696 wants to merge 1 commit into
mainfrom
fix/registration-accented-names
Closed

fix(auth): let people register under their own name#1228
ninja14696 wants to merge 1 commit into
mainfrom
fix/registration-accented-names

Conversation

@ninja14696

Copy link
Copy Markdown
Collaborator

O bug

O cadastro derivava o username do nome no navegador (AuthModal.vue:224) e o servidor exigia ^[a-zA-Z0-9_]+$ (AuthController.php:166). Qualquer nome com caractere fora de a-z era rejeitado:

João Silva              → joãosilva              REJEITADO
José Antônio            → joséantônio            REJEITADO
André Luís              → andréluís              REJEITADO
Maria Fernanda Oliveira → mariafernandaoliveira  REJEITADO (21 chars)
Ana Silva               → anasilva               passa

João, José, André, Luís, Antônio, Mônica, Inês — nomes dos mais comuns do Brasil. E o 422 voltava em inglês, citando um campo username que a pessoa nunca viu, num formulário em português.

Quem entra pelo Google não era afetado: aquele fluxo já chamava generateUniqueUsername.

A correção

O handle passa a ser gerado no servidor pelo mesmo generateUniqueUsername que já servia o login Google. Duas mudanças o deixam adequado para qualquer idioma:

  • Str::slug translitera em vez de descartar — "João" vira joao, não joo como antes.
  • Truncamento reservando espaço para o contador, para um nome longo não estourar a coluna.

Nome em alfabeto sem equivalente latino translitera para vazio e cai no prefixo do e-mail — comportamento que já existia e registra normalmente.

username continua aceito quando enviado explicitamente, então quem quiser escolher o próprio handle não é afetado.

Testes

Nove casos fixados: acento, cedilha, trema, nome de 30 caracteres, japonês, e duas pessoas com o mesmo nome. 386 testes passando.

Nota

Não há registro de quantas pessoas tentaram se cadastrar e falharam por isso — o erro não era logado em lugar nenhum. Pode ter custado usuários por meses sem deixar rastro.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VM3bUo411kUuZxq5r7x5Nr

Registration derived the username from the display name in the browser —
`displayName.toLowerCase().replace(/\s+/g, '')` — and the server then required
`^[a-zA-Z0-9_]+$`. Any name carrying a character outside a-z was rejected:
João, José, André, Luís, Antônio, Mônica, Inês. So were names over 20
characters. The 422 came back in English, naming a `username` field the person
had never seen, on a form rendered in Portuguese.

The handle is now generated server-side by generateUniqueUsername(), which
already existed and already served the Google sign-in path. Two changes make it
fit for everyone: Str::slug transliterates rather than discards, so "João"
becomes "joao" instead of "joo"; and the base is truncated with room reserved
for the disambiguating counter, so a long name cannot exceed the column.

A name in a script with no Latin equivalent transliterates to nothing and falls
through to the email prefix, which is the existing behaviour and registers fine.

`username` stays accepted when explicitly supplied, so anyone choosing their own
handle is unaffected.

Nine cases pinned: accents, cedilla, umlaut, a 30-character name, Japanese, and
two people who share a name. 386 tests pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VM3bUo411kUuZxq5r7x5Nr
@ninja14696

Copy link
Copy Markdown
Collaborator Author

Os dois commits foram movidos para dev (c8c048b e eb51e8f), que é onde o trabalho está sendo consolidado. Vão para main no próximo PR de release.

@ninja14696 ninja14696 closed this Sep 4, 2026
@ninja14696
ninja14696 deleted the fix/registration-accented-names branch September 4, 2026 12:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants