Problema ao renomear usuário com caracteres unicode

Estou tendo problemas para renomear um usuário de volta para o nome de usuário antigo (importe do phpBB e tive que renomear alguns usuários, por exemplo, Möp para Moep). Recebo um erro 500 ao tentar renomear o usuário, e ao recarregar o usuário ainda tem o nome sem o umlaut. Alguma ideia? As configurações de unicode estão ativadas, os umlauts são permitidos e também external system avatars enabled está ativado.

Você precisará olhar os logs e ver o que há neles. Você pode vê-los em /logs ou pode precisar olhar em /var/discourse/shared/standalone/log/rails/production.log (acho que é log e não logs).

Ah, obrigado. Eu não tinha ideia se e onde havia arquivos de log. Agora eu sei. :slight_smile:

Encontrei isto:

Started PUT "/users/moep/preferences/username" for xxxx:c5:9f0d:4c00:xxxx:e179:xxxx:xxxx at 2022-11-23 15:53:52 +0000
Processing by UsersController#username as */*
  Parameters: {"new_username"=>"Möp", "username"=>"moep"}
Completed 500 Internal Server Error in 338ms (ActiveRecord: 0.0ms | Allocations: 137204)
Encoding::CompatibilityError (incompatible character encodings: ASCII-8BIT and UTF-8)
app/models/user.rb:1806:in `username_validator'
app/services/username_changer.rb:35:in `change'
app/services/username_changer.rb:13:in `change'
app/controllers/users_controller.rb:202:in `username'

Há mais, mas pensei que poderia ser o suficiente. Se não for, posso fornecer mais.

A propósito, tentei mais de um nome de usuário e tive problemas semelhantes.

@pfaffman você consegue ver a causa nos meus logs por que recebo o erro 500? :slight_smile:

Não gostou dos caracteres no nome de usuário. Não sei por quê.

Eu acabei de testar a renomeação de um usuário de “moep” para “Möp” e funcionou.

  • Qual versão do Discourse você está usando?
  • Esta é uma instalação padrão?
  • Existe algum tipo de proxy reverso na frente do seu Discourse?
  • Qual navegador você está usando?
  • Qual é o valor da configuração allowed_unicode_username_characters?
  • A renomeação no console do Rails funciona?
    ./launcher enter app
    rails c
    
    user = User.find_by_username("moep")
    new_username = "Möp"
    UsernameChanger.change(user, new_username, Discourse.system_user)
    

A mais recente. Que deve ser a 2.9.0.beta12 no momento.

Sim. Apenas renomeei o nome do contêiner, pois planejo executar mais de uma instância do Discourse. Mas, no momento, apenas uma está em execução.

Apache 2.4

Chrome, Brave.

[äöüßÄÖÜẞ]

Também não funciona:

=> "Wägi"
[6] pry(main)> UsernameChanger.change(user, new_username, Discourse.system_user)
Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8
from /var/www/discourse/plugins/discourse-migratepassword/plugin.rb:78:in `+'

Aqui eu tentei “Waegi” para “Wägi”.

O que notei: uso uma nova versão de template para o contêiner que contém as seguintes informações:

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  DISCOURSE_DEFAULT_LOCALE: de

No template antigo (2019 ou por volta disso) havia apenas:

env:
  LANG: en_US.UTF-8
  DISCOURSE_DEFAULT_LOCALE: de

Isso talvez tenha a ver com o problema? E estas são as configurações corretas para uma instalação do Discourse com o idioma principal alemão?

Ah, e notei agora que o erro é lançado pelo discourse-migratepassword - que foi o motivo pelo qual renomeei os usuários antes de importar tudo do phpBB para o Discourse.

Seria útil desativar o discourse-migratepassword, renomear os usuários e depois ativá-lo novamente? O que mais é tratado pelo discourse-migratepassword que ele precisa estar ativo após a importação do phpBB?

Parece que o plugin discourse-migratepassword não é compatível com nomes de usuário Unicode.
cc @michaeld

Sim, desabilitar o plugin deve resolver esse problema para você.

Ele não é útil durante a importação, apenas após a importação, pois permite que seus usuários façam login com suas senhas antigas.

Ok, obrigado. Então eu desabilitaria, renomearia os usuários e depois o habilitaria novamente, certo. Obrigado novamente! :slight_smile:

Desativar e depois renomear os usuários funcionou. Obrigado novamente. :slight_smile:

Eu estava me perguntando: os usuários com umlauts agora podem fazer login com suas senhas antigas do phhBB, já que o discourse-migratepassword parece ter esse problema de unicode?

Tenho quase certeza de que, na primeira vez que eles fizerem login, a senha deles será salva como uma senha do Discourse, então você não precisará mais dela. Parece que qualquer pessoa que for fazer login com a senha importada já o fez.

Não consigo reproduzir este problema. Mesmas configurações para caracteres Unicode e permitidos, eu até criei um usuário com o mesmo nome de usuário e o renomeei para Möp. Deveria haver algo mais - que eu não sei - para que este problema surja?

Estranho. Tive este problema com todos os nomes de usuário que tentei. como caracteres unicode, eu só tinha umlauts alemães como äöü. Outro exemplo foi: Waegi de volta para Wägi.

Este problema surgiu pela primeira vez no script de importação do phpBB3 para o Discourse, que foi o motivo pelo qual renomeei todos os usuários com umlauts no phpBB e, em seguida, reiniciei o script de importação. Claro que eu queria os usuários no Discourse novamente com seus nomes de usuário originais.