Configurar single sign-on (SSO) com WP Discourse e DiscourseConnect

O plugin WP Discourse permite configurar o DiscourseConnect no WordPress, para que seus usuários possam usar sua conta do WordPress para fazer login no Discourse, ou sua conta do Discourse para fazer login no WordPress. Antes de configurar o DiscourseConnect, você primeiro precisa instalar o plugin WP Discourse no WordPress e conectá-lo ao seu Discourse. Se você está pronto para começar, assista a este vídeo curto ou siga as instruções abaixo.

Próximo passo

Depois de configurar o DiscourseConnect, você pode querer conferir os seguintes tópicos:


Instruções

Definindo uma Chave Secreta

Seja configurando o WP Discourse como Provedor ou Cliente do DiscourseConnect, você precisa definir uma chave secreta. Acesse a aba „Chave Secreta do DiscourseConnect“ e insira uma string de texto (números, letras e símbolos são permitidos), com pelo menos 10 caracteres. Use as mesmas regras para criar essa chave que você usaria para criar uma senha forte. Certifique-se de salvá-la ao terminar.

Em seguida, abra as Configurações do Site do Discourse (no painel de Admin) e pesquise por „discourse connect“. Uma das configurações próximas ao topo será discourse connect secret. Cole a chave secreta que você definiu no WP Discourse ali e clique no ícone verde de confirmação.

Fazendo login no Discourse com WordPress (Provedor do DiscourseConnect)

Certifique-se de que seu WP Discourse está conectado ao seu Discourse e que sua chave secreta está definida ( :point_up: ) antes de seguir estas instruções.

Para permitir que seus usuários façam login no Discourse usando as credenciais do WordPress, você precisa configurar o WP Discourse como Provedor do DiscourseConnect. Acesse a aba Provedor do DiscourseConnect nas configurações do WP Discourse, selecione a caixa de seleção Ativar Provedor do DiscourseConnect e salve suas configurações.

Em seguida, vá para as Configurações do Site do Discourse e digite „discourse connect“ na caixa de pesquisa para ver todas as configurações do DiscourseConnect do Discourse. Primeiro, defina o discourse connect url como a URL do seu WordPress. A etapa final é selecionar ativar discourse connect. Certifique-se de estar pronto antes de selecionar isso, pois, ao fazer isso, seus usuários só poderão fazer login no Discourse usando o WordPress.

Depois de ativar o discourse connect no Discourse, para garantir que está configurado corretamente, abra uma janela anônima no seu navegador. Mantenha sua janela normal (não anônima) do navegador logada em uma conta de administrador (caso algo dê errado e você precise reverter as configurações). Na janela anônima, você notará que o botão „Inscrever-se“ do Discourse não aparece mais. Clique no botão „Fazer login“. Você deve ver uma tela de login do WordPress. Insira suas credenciais do WordPress para fazer login. Você será redirecionado de volta ao Discourse e estará logado.

Se algo der errado ou você notar que algo não está certo, volte para sua janela normal do navegador e desative ativar discourse connect para permitir que seus usuários façam login no Discourse normalmente. Se, por algum motivo, você não estiver mais logado em sua conta de administrador na janela normal do navegador, consulte a seção „Desativar o DiscourseConnect pelo Console do Discourse“ abaixo para recuperar o acesso ao seu Discourse.

Verificação de e-mail

O Discourse espera que todos os endereços de e-mail dos usuários sejam verificados, e o WordPress não obriga os usuários a verificarem seus endereços de e-mail. Em uma configuração padrão do WordPress, é bastante fácil verificar o e-mail de um usuário durante o processo de registro, mas se um site estiver usando um plugin que cria um formulário de registro no front-end — por exemplo, o formulário de registro que pode ser adicionado com o WooCommerce —, o plugin WP Discourse não consegue verificar o e-mail do usuário.

Se os e-mails dos usuários não estiverem sendo verificados no WordPress, antes que um usuário do WordPress possa fazer login no fórum, ele precisará responder a um aviso de verificação de e-mail enviado pelo Discourse. O plugin possui alguns filtros que podem ser usados para substituir esse comportamento. Confira o código, começando aqui, para mais detalhes.

Remover a flag require_activation

Se você tem certeza de que o WordPress está autenticando endereços de e-mail, pode informar ao Discourse que ele não precisa fazer isso. Para remover completamente a flag require_activation, adicione algo como isto ao seu WordPress (por exemplo, no arquivo functions.php do seu tema):

// Substitua 'my_prefix' pelo prefixo do seu site.

add_filter( 'discourse_email_verification', 'my_prefix_discourse_email_verification' );
function my_prefix_discourse_email_verification( $require_activation ) {
    return false;
}

Para remover a flag require_activation para usuários específicos, use algo como isto:

// Substitua 'my_prefix' pelo prefixo do seu site.

add_filter( 'discourse_email_verification', 'my_prefix_discourse_email_verification', 10, 2 );
function my_prefix_discourse_email_verification( $require_activation, $user_id ) {
    $user = get_userdata( $user_id );
    if ( /* alguma condição testada contra $user */ ) {

        return true;
    }

    return false;
}

Webhook de Dados do Usuário

Este Webhook existe por razões históricas — agora é possível preencher automaticamente o campo Nome do Discourse usando a opção do Provedor do DiscourseConnect „Criar ou Sincronizar Usuários do Discourse no Login“.

O webhook Atualizar Dados do Usuário (no painel de configurações „Webhooks“) pode ser usado quando o WordPress é o Provedor do DiscourseConnect para seu Discourse. O webhook preenche automaticamente o campo Nome do Discourse do usuário no WordPress.

Criando um Link de Login do DiscourseConnect

Se você tiver a opção Provedor do DiscourseConnect ativada, pode adicionar um link de login do DiscourseConnect ao seu site WordPress criando um link com a seguinte estrutura:

<a href="https://discourse.example.com/session/sso?return_path=/">Comunidade</a>

Defina o valor de return_path para a página do seu fórum para a qual você deseja que o usuário seja direcionado. Você pode adicionar um link de login SSO a um menu do WordPress adicionando uma URL com essa estrutura como um Link Personalizado na seção Menus do painel do WordPress.

Fazendo login no WordPress com Discourse (Cliente do DiscourseConnect)

Para ativar seu site como um Cliente do DiscourseConnect para o Discourse, clique na aba Cliente do DiscourseConnect. Nessa página, selecione as opções Ativar Cliente do DiscourseConnect e Adicionar Link de Login.

Agora, vá para a página de Admin/Configurações do Discourse e pesquise por „discourse connect“ para ver todas as opções do DiscourseConnect.

  • selecione a configuração „ativar provedor do discourse connect
  • copie sua Chave Secreta do DiscourseConnect do WordPress para o campo „secret“ da configuração „discourse connect provider secrets“ do Discourse. No campo „domain“ dessa configuração, insira o domínio do seu site WordPress. Em seguida, clique no ícone verde de confirmação para salvar suas configurações.

Ao concluir, a configuração „discourse connect provider secrets“ no Discourse deve parecer com isto (com o domínio definido como o domínio do seu WordPress):

O Discourse agora deve estar funcionando como um provedor do DiscourseConnect para seu site WordPress.

Abra seu site WordPress em uma janela anônima no seu navegador. Quando você for para sua página de login, deverá ver um link „Fazer login com Discourse“ abaixo do formulário de login. Clique nele e você será levado ao formulário de login do Discourse. Faça login lá e será redirecionado de volta para a página de login do WordPress com um aviso dizendo que você precisa sincronizar sua conta com o Discourse. Siga as instruções no aviso para vincular suas contas e você deverá conseguir fazer login no seu site WordPress através do Discourse.

Observação: esse comportamento afeta apenas usuários que já possuem contas tanto no WordPress quanto no Discourse. Novas contas do WordPress criadas através do DiscourseConnect do Discourse poderão fazer login livremente no WordPress na primeira vez em que clicarem no link „Fazer login com Discourse“. Para facilitar o login de usuários com contas existentes tanto no seu site WordPress quanto no seu fórum Discourse através do Discourse, selecione a caixa de seleção Sincronizar Usuários Existentes por E-mail na aba de opções Cliente do DiscourseConnect.

Sincronizando o Logout do Discourse

Quando o DiscourseConnect está ativado, o logout do Discourse pode ser sincronizado com seu site WordPress adicionando o home_url do seu site com o parâmetro de consulta request=logout à configuração do Site do Discourse logout redirect. A configuração está na seção de configurações do Discourse em /admin/site_settings/category/users. Aqui está um exemplo de URL „logout redirect“:

http://example.com/?request=logout

Solução de Problemas

Se você estiver tendo problemas ao usar o WordPress como provedor do DiscourseConnect para seu fórum, as primeiras coisas a verificar são:

  • que as chaves secretas do DiscourseConnect definidas no WordPress e no Discourse são as mesmas
  • certifique-se de ter selecionado Ativar Provedor do DiscourseConnect no seu site WordPress
  • certifique-se de ter inserido a URL correta do discourse connect no Discourse.

„Erro de Login“ ao usar o DiscourseConnect

Se os usuários estiverem recebendo uma mensagem de „Erro de Login“ ao tentar fazer login no Discourse, consulte:

Debug and fixing common DiscourseConnect issues.

Desativando o DiscourseConnect

Se o DiscourseConnect não estiver funcionando para você, você pode desativá-lo desabilitando a configuração do site ativar discourse connect. Se você não estiver mais logado em uma conta de administrador em algum lugar para desativá-lo, não se preocupe, existem algumas maneiras de voltar para desativá-lo.

Login via /users/admin-login

Abra uma nova janela do navegador e insira a URL do seu fórum na barra de URL, seguida por /users/admin-login, por exemplo:

https://community.mysite.com/users/admin-login

Você verá uma solicitação para inserir seu e-mail de administrador. Após enviar seu e-mail, você receberá um e-mail com um link que permitirá fazer login diretamente em sua conta de administrador. Em seguida, você pode ir para as configurações do site e desativar ativar discourse connect para desligar o DiscourseConnect.

Se isso não funcionar por algum motivo, não se preocupe, você ainda pode desativar o DiscourseConnect pelo console do servidor (:point_down:)

Desativar o DiscourseConnect pelo console do servidor

Se você não sabe o que é o console do servidor ou não tem acesso a ele, entre em contato com seu provedor de hospedagem para obter ajuda. Depois de fazer SSH no seu servidor, os comandos que você precisa executar são os seguintes:

cd /var/discourse
./launcher enter app
rails c
SiteSetting.enable_discourse_connect=false
exit
exit
11 curtidas

E se eu não tiver essas opções no meu Discourse? :/\n

Olá @LosHunterros, bem-vindo à Meta!

O Discourse Connect não está incluído no plano básico de hospedagem
Screenshot_20240507_204846_Chrome

4 curtidas

Obrigado pela sua resposta

1 curtida

Agora preciso de um nível realmente básico. Ou um simples sim ou não.

Preciso de acesso fácil do WordPress ao meu fórum para esses clientes. Como eles criaram uma conta no WordPress, eu a usaria como provedor.

Mas estou tendo problemas com a IA do Discourse agora. Entendi que o DiscourseConnect sequestrará todos os outros logins, como Google, Microsoft e locais. Mas a IA tem certeza absoluta de que isso não é verdade, se eu definir discourse connect allowed redirect domains.

Bem, eu fiz isso. E ainda redireciona para o WordPress sem nenhuma outra opção de login.

Então, desperdicei duas horas da minha vida por causa de uma alucinação de uma IA, ou fiz algo errado? Porque se eu estava certo no início e o DiscourseConnect não permite outros logins, vou removê-lo imediatamente. Viver sem login do Google não é uma opção neste canto da Europa.

Seu pensamento inicial estava correto. A IA está errada: Veja mais.

Infelizmente, sim.

1 curtida

Segui o guia de configuração até o ponto em que o SSO deveria estar funcionando. Quando visito meu site Discourse em uma janela anônima, sou imediatamente redirecionado para a página inicial do meu WordPress com uma longa query string na URL e sem opções de login visíveis.

Este é o comportamento esperado neste estágio?
Eu só preciso terminar de construir o lado do WordPress (login/registro, etc.), ou configurei algo incorretamente?

Olá Mike, bem-vindo. Você deve ser direcionado para a página de login padrão do Wordpress. A primeira coisa que me vem à mente é que seu tema (ou um plugin) está fornecendo uma página de login personalizada. Como é normalmente a sua página de login?

Olá Angus, obrigado! :slight_smile:

Esta é uma instalação nova do WordPress e do Discourse, com o tema Twenty Twenty-Five ativo. Segui suas instruções em vídeo passo a passo, mas quando acesso o Discourse em uma janela anônima, ele redireciona para o site do WordPress e cai na página inicial do tema, não em uma tela de login.

O site do WordPress está atualmente protegido por privacidade de diretório, pois está em um ambiente de desenvolvimento – isso poderia estar afetando o redirecionamento para a página de login normal?

Olá Mike, aqui está um pequeno vídeo meu que acabei de gravar mostrando uma instalação funcionando no código atual.

Apenas verifique sua configuração em relação ao que mostro no vídeo e, se tiver certeza de que a configurou da mesma forma e ainda não está funcionando, passaremos por um processo de eliminação para ver se conseguimos descobrir o porquê.

1 curtida

Olá Angis,

Muito obrigado por fazer aquele vídeo, ótimo suporte!

Eu forneci capturas de tela de cada seção (com informações sensíveis borradas)

image

image

image

Na imagem acima, isso não estava realmente selecionado (ops), mas, quando eu visito o fórum em um navegador anônimo, ele redireciona automaticamente para /wp-login.php - eu não vejo o fórum e o botão de login como você.

image

Eu não estou muito preocupado com o fato de ele ir direto para a página wp-login agora, mas ter acesso de visualização direta ao fórum é sempre um bônus!

@angus Eu descobri… Durante o “o que estou fazendo” inicial, eu bloqueei a comunidade com isto;

image

Desculpas por ser um PITA (aborrecido), é o modo de inicialização :dashing_away:.

Obrigado novamente pelo suporte incrível - tenho certeza que voltarei.

2 curtidas

Fico feliz que você tenha descoberto!

Olá Angus, eu me pergunto se você pode ajudar com este problema que estou tendo, não recebi nenhuma resposta ao meu tópico:

Basicamente, se eu anonimizar um usuário, o plugin SSO simplesmente cria uma nova conta para ele. Existe uma maneira de desativar usuários individualmente para impedir que ele crie novas contas para eles, e isso pode ser sincronizado automaticamente quando eu banir ou anonimizar alguém?

Talvez anonimizar o usuário e, em seguida, fazer com que o endereço de e-mail dele seja o do SSO. Ou fazer com que o WordPress desabilite o usuário (esta parece ser a solução real - o WordPress deve negar o usuário)

Como faço para que o WordPress proíba o usuário de fazer login via SSO? Essa é a solução que eu acho.

Essa é uma pergunta do WordPress. :wink:

Eu usei a internet e parece que você pode mudar a função deles para “nenhuma função neste site”

Ah, o que eu quis dizer foi que quero que o usuário possa continuar usando o site, mas não consiga criar uma conta no fórum.

Nosso fórum é separado do site, então algumas pessoas que foram banidas da comunidade por serem disruptivas ainda devem poder usar o site, que é uma ferramenta SaaS (Software como Serviço).

Então eu acho que você precisará suspendê-los no discourse. Se você precisar anonimizar o conteúdo deles, você precisará fazer isso e então criar a conta que está suspensa.

Olá @Shauny, eu respondi à sua postagem de suporte original:

1 curtida