WordPress SSO e Login Patreon

Ótimo trabalho em descobrir isso :+1:

Não quero diminuir o trabalho que você já fez, mas minha primeira impressão é que você deve considerar usar um serviço de autenticação externo (como okta.com ou auth0.com) neste momento. Sempre que você chegar ao ponto de conectar três serviços diferentes (por exemplo, Patreon, WordPress e Discourse) para realizar uma única autenticação de uma só vez, isso é um sinal de que você deve considerar uma solução dedicada de autenticação. Independentemente de ser possível alcançar isso de alguma forma, há um risco considerável de longo prazo de que sua solução possa falhar ou não funcionar em todos os casos.

Se você ainda quiser seguir por esse caminho, tenho algumas sugestões, mas aviso que isso ficará um pouco técnico. Estou adicionando isso aqui em parte caso alguém mais encontre isso e queira levar isso adiante.

Dê uma olhada rápida no código do plugin Patreon para WordPress e parece que o fluxo OAuth deles aceita uma chave/valor final_redirect_uri no parâmetro state, o que permitiria ir diretamente da autenticação do Patreon para o SSO do Discourse, eliminando a necessidade dos plugins Members e Redirect mencionados acima, e evitando quaisquer problemas que possam surgir com essa abordagem.

Muitos serviços de autenticação têm uma versão do parâmetro final_redirect_uri, ou seja, um parâmetro que permite alterar para onde o usuário é enviado após a autenticação. Se você está lendo isso porque está tentando resolver o mesmo problema, mas com um serviço diferente (ou seja, outro que não seja o Patreon), e também decidiu que meu aviso contra conectar três serviços diferentes não se aplica, então é aí que você deve procurar.

Isso significa que você gostaria que o shortcode que gera o botão de login do Patreon aceitasse um final_redirect_uri como argumento, que seria então passado para a URL de login final usada pelo Patreon. Analisando o código do plugin Patreon para WordPress, isso é uma proposta viável. Para dar uma ideia, a função relevante que gera a URL do Patreon se parece com isto:

Patreon_Frontend::patreonMakeLoginLink(false, array( 'final_redirect_uri' => # ) );

Basicamente, o código já está parcialmente configurado para lidar com um final_redirect_uri personalizado. Posso entender por que os desenvolvedores do plugin Patreon para WordPress podem não querer adicioná-lo, mas se você se sentir confiante o suficiente para descrever o que descrevi aqui, pode valer a pena criar uma issue no repositório deles no GitHub. Caso contrário, você pode usar a função que referenciei acima para gerar um link você mesmo e criar seu próprio botão (ou contratar um desenvolvedor WordPress para fazer isso).

Apenas uma nota menor sobre a construção da URL do SSO, é um pouco mais claro usar

https://discourse.example.com/session/sso?return_path=/

em vez de

https://discourse.example.com/session/sso?return_path=%2F

A última parte, o return_path, é o caminho para onde o usuário será enviado no Discourse após o login. Se for /, eles serão enviados para a página inicial do fórum. Para mais informações sobre a construção da URL do SSO, consulte WP Discourse Dicas e Truques.