Múltiplos sites Discourse em um único WordPress com wp-discourse

Tenho um cliente que tem um site WordPress que lida com assinaturas e um fórum conectado com wp-discourse. Tudo está bem.

Mas agora ele quer adicionar sites Discourse adicionais que se autenticam contra o único site WordPress. Tentei copiar a configuração do primeiro site Discourse para o segundo, mas o WordPress redireciona para o primeiro site Discourse. Pensei então que talvez eu pudesse fazer do primeiro site Discourse um servidor discourse_connect para o segundo site, mas isso ainda não está funcionando (também apenas redireciona para o primeiro site Discourse e o segundo não é logado).

Existe alguma maneira de ter um único site WordPress que forneça autenticação para vários sites Discourse?

2 curtidas

Se você planeja usar o single sign-on para mais de duas plataformas, a solução mais correta é usar o keycloak.
Essa abordagem é boa porque não precisamos pensar em um servidor de single sign-on e um login mais simples via redes sociais (e não apenas).
Você pode adicionar e remover quaisquer sites sem perder o usuário.

O plugin WP Discourse não está configurado para lidar com isso, mas deve ser possível.

Eu começaria adicionando um parâmetro de URL site à configuração discourse_connect_url do Discourse. No WordPress, use o parâmetro site para definir o site Discourse correto para redirecionar aqui:

Você provavelmente também precisaria lidar com a chamada para sync_sso que ocorre aqui: wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub

Não tenho certeza sobre isso, mas talvez você precise adicionar site às variáveis de consulta permitidas nesta função (para que o WordPress não remova o parâmetro): wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub

Idealmente, as alterações acima poderiam ser realizadas com ganchos action e filter no WordPress. Parece que ganchos precisariam ser adicionados ao código para isso.

Estou assumindo que a especificação para isso não envolve a publicação de posts do WordPress em vários sites Discourse. Se for esse o caso, as alterações necessárias seriam um pouco mais envolvidas.

Avisarei se pensar em mais algum problema.

Editar: preciso pensar sobre como o ID do usuário do Discourse é usado no WordPress para garantir que não haja conflitos entre vários sites - um único usuário no WordPress pode ter contas em vários sites WordPress. Eles teriam um ID de usuário Discourse diferente em cada site.

Editar: o maior problema que vejo é se a configuração “Criar ou Sincronizar Usuários do Discourse no Login” estiver habilitada nos sites WordPress. Ele faz uma chamada de API para a rota sync_sso do Discourse. Você precisaria ter uma maneira de saber em qual site Discourse sincronizar ou criar o usuário. Você também precisaria ter uma chave de API do Discourse para cada site. Isso parece factível, mas adicionaria alguma complexidade.

3 curtidas

Isso parece meio possível. Sim, ele não se importa com postagem, apenas com autenticação e, acho que, com o envio de grupos do WooCommerce ou similar.

Estou assumindo que isso significa ajustar as associações de grupo de um usuário em um determinado site Discourse quando ele faz uma compra no site WordPress. Isso parece factível, mas seria melhor feito com uma solicitação de API para a rota sync_sso. O plugin WP Discourse tem funções que podem ser usadas para isso, mas elas usam a URL e a Chave de API do Discourse que estão definidas nas páginas de opções do plugin: https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L278-L326. Talvez o plugin possa adicionar ganchos de filtro a esses parâmetros para que eles possam ser definidos condicionalmente.

3 curtidas

Estamos explorando uma configuração semelhante, então também estaria interessado em uma solução.

1 curtida

Acho que ele não respondeu quando perguntei se ele queria jogar para desenvolvimento (suspeito que porque ele está ocupado com outras coisas).

Se você tiver um orçamento, isso pode ajudar.

Ainda é exploratório, então não tenho um orçamento como tal. Mas posso fornecer alguma assistência de desenvolvimento e talvez um pequeno financiamento. Se o seu cliente também estiver disposto a contribuir, talvez possamos juntar alguns fundos.

1 curtida