Configurei o Discourse para usar o Auth0 como provedor de SSO. O problema que tenho é que, quando um usuário se registra, ele recebe dois e-mails de verificação: um do Auth0 e outro do Discourse.
Existe alguma maneira de desabilitar o do Discourse?
O termo SSO é usado para diferentes métodos de autenticação. Isso já causou confusão algumas vezes no passado.
Se você estiver usando a implementação do Discourse de SSO, a verificação de e-mail é controlada pelo parâmetro require_activation do SSO. Defina esse parâmetro como "false" para ignorar a verificação de e-mail.
Quero evitar desativá-lo completamente. No momento, configurei para que require_activation retorne verdadeiro ou falso com base na verificação feita pelo Auth0. Isso funciona bem e, após clicarem no e-mail do Auth0, na próxima vez que fizerem login, eles são verificados no Discourse.
Portanto, idealmente, seria apenas suprimir o e-mail, a menos que eu esteja perdendo algo.
Isso faz sentido. Nosso plugin do WordPress lida com a verificação de e-mail da mesma forma.
Se quiser ver como o valor require_activation é usado pelo Discourse, consulte este arquivo: https://github.com/discourse/discourse/blob/master/app/models/discourse_single_sign_on.rb#L81. Você verá que, quando require_activation é definido como "false" ao criar um usuário via SSO, o Discourse cria um usuário ativo. Se for definido como "true", o usuário não será ativado até clicar no link no e-mail de ativação do Discourse.
Uma vez que um usuário é definido como active no Discourse, a única coisa que deve fazer com que um usuário precise ser reativado é se você tiver habilitado a configuração do site sso_overrides_email e o usuário atualizar seu endereço de e-mail no site do provedor de SSO.
Quando definido como "true", require_activation também impede que o Discourse corresponda usuários existentes a usuários do seu site externo com base no endereço de e-mail. Isso pode causar problemas quando o SSO é implementado após os usuários já terem sido criados no site com contas de nome de usuário/senha.
Para que o e-mail de verificação seja enviado apenas pelo site do seu provedor SSO, os usuários precisarão se registrar nesse site e verificar seu endereço de e-mail antes de fazer o primeiro login no Discourse. Em seguida, você poderá definir o parâmetro require_activation como "false" para esses usuários. Eles serão criados como usuários ativos no Discourse e não receberão o e-mail de ativação do Discourse.
Isso não faz sentido. Como faço para exigir que eles verifiquem o e-mail antes do primeiro login no Discourse?
Meu site já cuida da verificação de e-mail. Como desabilitar o envio de e-mail de verificação pelo Discourse, mas ainda assim exibir uma mensagem ao usuário informando que ele precisa autenticar?
O DiscourseConnect pressupõe que você está validando endereços de e-mail no seu site. Enquanto você estiver fazendo isso, não defina o parâmetro require_activation no payload do SSO. Se esse parâmetro não estiver no payload, os usuários serão logados no Discourse sem que um e-mail de ativação seja enviado a eles.
Sim, mas então o Discourse assumirá que eles foram validados, o que pode não ser verdade se o usuário acessou o fórum e esqueceu ou decidiu não validar o e-mail. Se o site define require_validation como true, significa que o usuário ainda não validou seu e-mail no site, mas certamente recebeu um link de validação, então não há necessidade de o Discourse enviá-lo novamente, mas ele o fará por causa desse parâmetro.
Basicamente, o problema só surge se o usuário acessar o Discourse antes da validação. Então, no momento, tenho basicamente que escolher entre duas opções:
O usuário recebe apenas um e-mail de validação, mas será tratado pelo Discourse como validado, o que não é ideal, pois eles podem não concluir a validação.
O usuário recebe dois e-mails de validação, mas será devidamente validado tanto pelo fórum quanto pelo site. Essa opção também não é ideal, mas é definitivamente melhor entre as duas.
Existe uma terceira opção: adicionar um interruptor que funcione apenas se o SSO estiver habilitado, desativando o e-mail de verificação do Discourse (mas deixando uma página de erro que informa ao usuário que ele não foi verificado)
Idealmente, quando um usuário cria uma conta no seu site, você deve validar o endereço de e-mail dele solicitando que ele responda a um e-mail de ativação enviado a partir do seu site quando o usuário se registrar. Se, por algum motivo, você permitir que os usuários criem contas no seu site antes de validarem seus endereços de e-mail, você pode definir o parâmetro require_validation condicionalmente no payload SSO. Se o usuário já validou seu endereço de e-mail, defina require_validation como false ou simplesmente omita o parâmetro do payload. Se o usuário ainda não validou seu endereço de e-mail no seu site, defina o parâmetro require_activation como true para que um e-mail de ativação seja enviado a ele pelo Discourse.
É exatamente isso que estou fazendo e isso é um problema. Por exemplo, o usuário se registra, recebe um e-mail de ativação do site, mas, em vez de abri-lo e ativá-lo, decide ir ao Discourse, porque não. Então, require_activation será definido como verdadeiro, pois o usuário ainda não foi ativado. Mas o Discourse decidirá que o usuário precisa de outro e-mail de ativação, o que é um problema, já que já há um e-mail de ativação do site aguardando para ser aberto. O Discourse deveria apenas exibir uma mensagem de erro informando que o usuário deve verificar seu e-mail.