Fazer o Discourse reconhecer contas verificadas no Wordpress (e WooCommerce) para SSO

Continuando a discussão de Como desativar a verificação de e-mail do Discourse?:

O Discourse não está reconhecendo nossas contas verificadas. Aqui está algum contexto sobre a configuração atual do nosso site:

Estou usando o plugin WP Discourse com o WordPress como provedor de SSO

Configurações atuais de SSO <img>

Atualmente, estou usando o WooCommerce (WC) para gerenciar novos registros de usuários, aqui: https://pickleballist.com/my-account

Estou usando um plugin chamado Booster for WC, que adiciona funcionalidades extras ao WC, incluindo a capacidade de exigir verificação de e-mail antes que um usuário possa acessar sua conta.

Opções do plugin <img>

E-mail de verificação recebido <img>

Após o usuário clicar no link do e-mail de ativação da conta, ele é levado para a página /my-account/ no WordPress. Se alguém tentar fazer login com as credenciais de registro sem clicar no link de verificação, será informado que a conta precisa ser verificada primeiro, e receberá um link para “reenviar e-mail de verificação”.

Se você visitar a página “Usuários” no console de administração, poderá facilmente ver quais contas foram verificadas e quais não foram.

Contas de usuário com representação de verificação <img>

Infelizmente, após o usuário verificar seu e-mail e tentar visitar nosso fórum em https://forums.pickleballist.com, ele não é automaticamente logado. :disappointed_face: Mas o pior é que, ao clicar no botão “Login” no fórum, ele é solicitado a verificar seu e-mail e clicar no link do e-mail do Discourse “Confirme sua nova conta”.

Existe uma maneira de fazer o Discourse verificar quem realmente está verificado com base nos metadados recebidos do WooCommerce?

Estou supondo que este “Módulo de Verificação de E-mail” não esteja tocando em wp_new_user_notification, senão o Discourse veria isso, certo? Podemos fazer o Discourse procurar por algum outro hook?

Aguardo qualquer insight sobre isso!

@simon Acabei de notar seu comentário aqui:

Usar esse trecho de código :up_arrow:︎ seria a solução para o que estou tentando realizar?

Desde que o plugin Booster for WC impeça que os usuários façam login no WordPress antes de verificarem seu endereço de e-mail, esse código poderá ser usado com segurança. Ao adicioná-lo ao seu tema ou a um plugin, ele permitirá que os usuários façam login no seu site Discourse sem precisar revalidar o endereço de e-mail.

Isso também seria possível. Se você souber o nome da chave de metadados definida pelo WooCommerce e o valor de retorno esperado para usuários com endereços de e-mail verificados, poderá adicionar uma verificação para isso na função. Algo assim:

add_filter( 'discourse_email_verification', 'wpdc_custom_discourse_email_verification', 10, 2 );
function wpdc_custom_discourse_email_verification( $require_activation, $user_id ) {
    if ( 1 === get_user_meta( $user_id, 'wc_metadata_key', true ) ) {
        $require_activation = false;
    }

    return $require_activation;
}

Se você estiver enfrentando problemas de redirecionamento de login SSO com o WooCommerce, talvez seja necessário instalar este plugin no seu site: GitHub - scossar/wp-discourse-woocommerce-support: Integrates the wp-discourse plugin with WooCommerce · GitHub. Consulte o readme do plugin para obter detalhes sobre o que ele faz.

Esse código resolveu! Agora os usuários só precisam clicar no link de verificação gerado pelo WP. :folded_hands: Obrigado!

Acabei de adicionar isso, mas quando o usuário clica no link de verificação gerado pelo WP, ele é levado apenas para a página /my-account no WP, após a verificação. Ele não retorna aos fóruns do Discourse. Qual é o comportamento esperado aqui?

Acho que o link de verificação está sendo gerado pelo plugin Booster for WC. Se for esse o caso, então não é algo que eu tenha testado. O problema que o plugin wp-discourse-woocommerce-support visa resolver é substituir um redirecionamento de login definido pelo WooCommerce em toda tentativa de login. Não testei com o WooCommerce recentemente, mas, no passado, quando o WooCommerce estava instalado em um site, ele impedia que usuários não logados fossem redirecionados para o Discourse ao tentar fazer login pelo WordPress.

O comportamento esperado é que, quando um usuário que não está logado no WordPress clicar no botão de login no Discourse ou em um link de login SSO gerado abaixo de uma publicação publicada no Discourse, o usuário será levado ao processo de login do WordPress e, em seguida, redirecionado para a URL correta do Discourse. Avise-me se isso não estiver funcionando corretamente para usuários que verificaram seu endereço de e-mail.

Pode ser possível fazer isso funcionar com o link de verificação que seus usuários estão clicando, mas acho que se trata de um problema separado.