Não encontrei uma forma de reproduzir este problema, mas no último mês notei duas instâncias em que um usuário foi supostamente desativado (conforme visto nos logs de ação da equipe), mas não foi realmente desativado (o usuário ainda conseguia fazer login).
Por exemplo, este foi “desativado” há 29 dias, mas conseguiu me enviar uma mensagem privada hoje (as únicas outras ações da equipe após a desativação são “verificar e-mail”)
Isso ainda está acontecendo esporadicamente. Por exemplo, este usuário foi inicialmente “desativado” em 23 de agosto, mas só percebi agora que ele ainda estava ativo e realmente o desativei.
Como um usuário pode ser desativado duas vezes (sem reativação entre elas)?
Tenho uma tarefa diária que executa uma consulta para verificar essa situação. Ela não retornou nada ontem e apenas este usuário hoje, então o que parece estar acontecendo é que o usuário foi corretamente desativado em 23 de agosto, mas de alguma forma foi ativado ontem (sem que isso fosse registrado em lugar nenhum).
É possível ativar um usuário (via API ou UI) e não deixar rastros? Presumo que isso só poderia acontecer modificando o banco de dados diretamente, o que tenho certeza que não fiz (sou o único administrador).
Isso pode acontecer. Tudo o que um usuário desativado precisa fazer para reativar sua conta é tentar fazer login no site e, em seguida, clicar no link no e-mail de ativação que é enviado a ele.
Quando um usuário desativado tenta fazer login, ele verá esta janela modal:
Após clicar no link no e-mail, o usuário fará login no Discourse.
Este tem sido o comportamento desde que me lembro. Não acho que seja um bug, mas posso estar errado. Enviar um e-mail de “Confirme sua nova conta” para um usuário que já tem uma conta parece um pouco estranho.
Editar: para obter o comportamento que você procura, provavelmente você vai querer “suspender” o usuário em vez de desativá-lo.