Validações de Autenticação do Discourse

|||
-|-|-|
:discourse2: | Resumo | Validações de Autenticação do Discourse permite adicionar validações personalizadas a um Campo de Usuário para alternar a exibição de Campos de Usuário no Modal de Inscrição.
:hammer_and_wrench: | Link do Repositório | https://github.com/discourse/discourse-authentication-validations
:open_book: | Guia de Instalação | Como instalar plugins no Discourse

:information_source: Sobre

Validações de Autenticação do Discourse adiciona a capacidade de adicionar validações personalizadas a um Campo de Usuário.

Campos de Usuário Personalizados não possuem nenhum tipo de validação fornecida pelo core, além de detectar um valor vazio em um campo obrigatório. Este plugin adiciona a capacidade de definir uma regex, por campo de usuário, que será então verificada contra o valor de entrada fornecido.

Além disso, este plugin adiciona a capacidade de alternar a exibição de Campos de Usuário no Modal de Inscrição. Isso permite que você "conecte" Campos de Usuário, de modo que um Campo de Usuário só seja exibido se um Campo de Usuário anterior tiver um valor específico.

:building_construction: Configuração Básica

1. Habilitar Plugin

O plugin Validações de Autenticação do Discourse pode ser habilitado pelo alternador ou a partir de suas configurações, ambos acessíveis em sua página admin/plugins.

2. Adicionar uma validação personalizada a um Campo de Usuário

Após o plugin Validações de Autenticação do Discourse ter sido habilitado, você verá uma caixa de seleção Incluir Validações Personalizadas na parte inferior do seu formulário de Campo de Usuário.

Quando marcada, ela exibirá três campos adicionais:

  1. Regex de Validação de Valor
  2. Mostrar Valores
  3. Campos de Usuário de Destino

:closed_lock_with_key: Adicionando uma Validação Personalizada

Inclua uma regex válida no campo Regex de Validação de Valor:

O valor do campo de usuário no formulário de inscrição será agora testado contra a regex que você incluiu. No caso de a entrada não atender aos padrões da sua Regex personalizada, o formulário de inscrição não será enviado.

Nenhum valor (depende da validação padrão do formulário)

Valor incorreto

Valor correto

:link: Conectando Campos de Usuário

Primeiro, inclua um valor Mostrar Valores em um Campo de Usuário.

Quando um Campo de Usuário tem um valor Mostrar Valores incluído, ele observará o valor da entrada anexada até que o valor da entrada corresponda a QUALQUER um dos Mostrar Valores. Ele então alternará a visibilidade de quaisquer Campos de Usuário de Destino incluídos, tornando-os visíveis.

Em segundo lugar, adicione um valor Campos de Usuário de Destino.

No menu suspenso Campos de Usuário de Destino, você verá uma lista de todos os Campos de Usuário disponíveis. Qualquer Campo de Usuário que você selecionar terá sua visibilidade alternada pelos valores correspondentes em Mostrar Valores.

:hammer_and_wrench: Encadeamento Avançado

Você pode encadear Campos de Usuário adicionando validações personalizadas a vários Campos de Usuário.

Por exemplo, digamos que temos três Campos de Usuário com os valores fornecidos:

Nome Possui Validação Personalizada Mostrar Valores Campos de Usuário de Destino
Entrada Um verdadeiro mostrar-campo-dois Entrada Dois
Entrada Dois verdadeiro mostrar-campo-três Entrada Três
Entrada Três falso

A Entrada Dois e Três ficarão ocultas por padrão, pois são "filhas" da Entrada Um. Quando o valor de exibição de mostrar-campo-dois for adicionado à Entrada Um, a Entrada Dois será exibida, mas a Entrada Três permanecerá oculta. Ela permanecerá oculta até que a Entrada Dois tenha o valor de mostrar-campo-três.

Com a combinação correta de Mostrar Valores e Classes de Destino, você pode aninhar infinitamente Campos de Usuário uns abaixo dos outros.

18 curtidas

Olá @isaac.

Adorei este plugin, é exatamente o que eu precisava! Ele ainda está sendo mantido? Estou tendo problemas com a funcionalidade de “chaining”.

Segui o exemplo acima usando:

Mas ele está mostrando todos os campos por padrão… Peço desculpas se perdi alguma coisa na descrição!

1 curtida

Peço desculpas por isso - o plugin está funcionando. No entanto, ele não funciona se você estiver visualizando através de um link de inscrição por "convite". Ele funciona se você estiver usando uma página de inscrição pública.

Poderia ser um bom recurso ter a lógica funcionando para inscrição por convite e pública!

Ótimo trabalho com o plugin!

5 curtidas

Concordo plenamente. @tobiaseigen se adotássemos este plugin como um recurso mais amplo, gostaríamos que a lógica funcionasse em ambos os lugares (público/convite), como @kravitsjacob apontou.

2 curtidas

Olá @isaac. Obrigado mais uma vez por este plugin incrível - ele realmente abriu tantas oportunidades de discussão para mim.

Encontrei um pequeno bug - notei que as respostas às perguntas são salvas, mesmo que uma pergunta esteja oculta. Isso levou a algumas situações não intencionais em que os usuários estão enviando respostas que não deveriam ser possíveis (daí porque queríamos ocultar as perguntas em primeiro lugar). Esse comportamento também causa outra situação em que, quando uma pergunta é duplamente aninhada, ela ainda aparece, mesmo que a resposta pai tenha sido desmarcada (porque ainda pensa que a resposta que a acionou está selecionada). Sei que esta descrição é um pouco vaga, então aqui está um gif destacando esse comportamento:

auth null bug

Acho que a correção desejada seria redefinir as respostas para o valor nulo assim que elas não estiverem mais visíveis. Isso também poderia ser um comportamento “opt-in” que é configurável pela pessoa que está configurando o formulário - eu poderia ver diferentes filosofias existindo sobre se as respostas devem persistir ao descer por essas árvores.

Você seria capaz de implementar isso? :pray:

5 curtidas

Obrigado pela resposta detalhada! Vou dar uma olhada nisso na próxima semana :slight_smile:

3 curtidas

Tive a oportunidade de analisar essas questões hoje :slight_smile:

Por favor, leia a descrição do PR para mais detalhes!

3 curtidas

Atualmente é impossível ter um campo opcional obrigatório.

Tenho um campo “Indústria” e sempre que “Outra” é selecionado, ele revela o campo “Outra Indústria”.

Mas quando eu torno o campo “Outra Indústria” obrigatório, sou incapaz de enviar o formulário quando esse campo está oculto.

Quando eu oculto manualmente a div, você pode ver que ele está exigindo essa entrada, mesmo que o formulário esteja oculto.

Quando eu seleciono “Outra”, preencho um valor e, em seguida, seleciono outra indústria para que a entrada fique oculta novamente, posso enviar o formulário. E então a mesma situação acontece como @kravitsjacob apontou: o valor do campo “Outra Indústria” é salvo no perfil do usuário, mesmo que “Indústria” não esteja definido como “Outra”.

Administrador do Usuário:

3 curtidas

Olá @RGJ, você conseguiu resolver o problema com os campos obrigatórios? Estou com o mesmo problema.
@isaac existe alguma solução alternativa para isso? Eu tenho campos que deveriam ser obrigatórios enquanto a condição para torná-los visíveis é satisfeita.

Não, eu não tive retorno sobre isso nem gastei tempo eu mesmo.

@RGJ , obrigado pela resposta rápida.
Acabei de criar um PR no repositório original com uma correção que deve resolver o problema.
O principal desafio aqui foi o fato de você ter dois locais onde a validação é executada, que são o Frontend e o Backend, então tive que implementar a solução para cada um separadamente e garantir que funcionassem como esperado.
Espero que isso ajude alguém no futuro.