Por muito tempo, usamos o plugin patreon com a API V1 para Discourse para fazer login com o Patreon. Esta é a configuração recomendada de acordo com a documentação oficial do plugin Discourse patreon: https://meta.discourse.org/t/configure-patreon-integration-with-discourse/62380

No entanto, o Patreon não suporta mais a V1 há anos. Ela quebra constantemente, não sincroniza totalmente e, recentemente, simplesmente parou de funcionar para nós.
O problema é que, quando mudamos para a API V2, que é suportada pelo Patreon, a autorização dos usuários falha. Quando os usuários tentam clicar em “fazer login com Patreon” e permitem que a API v2 se conecte à conta deles no Patreon, eles recebem este erro:
Desculpe, ocorreu um erro ao tentar autorizar sua conta com o Patreon. Por favor, tente novamente.
E de acordo com a documentação oficial do plugin Discourse patreon, afirma especificamente que a API v2 pode causar esses erros de autenticação. O que torna a v2 inutilizável.

Felizmente, encontramos uma solução alternativa para fazer a API v2 funcionar. Esta solução deve ser adicionada à documentação oficial, pois no momento a API v1, que é o que é recomendado, está completamente quebrada.
Solução
A solução é criar um OAuth2 personalizado. Em vez de os usuários usarem o botão “fazer login com Patreon” do plugin patreon, eles usarão um botão de login personalizado que criamos e que se autenticará com o Patreon usando nosso próprio oauth.
Passo 1: Adicione estes URIs de redirecionamento ao Patreon.
-
https://<seu_link_do_servidor_discourse>/auth/oauth2_basic/callback -
https://<seu_link_do_servidor_discourse>/auth/patreon/callback
Passo 2: No Discourse, vá para Admin > Login & Autenticação > OAuth2 e configure o seguinte:
-
oauth2_enabled: true -
oauth2_client_id:<seu_client_id_do_Patreon> -
oauth2_client_secret:<seu_client_secret_do_Patreon> -
oauth2_authorize_url:https://www.patreon.com/oauth2/authorize -
oauth2_authorize_signup_url:(deixe em branco) -
oauth2_token_url:https://www.patreon.com/api/oauth2/token -
oauth2_callback_user_id_path:(deixe em branco) -
oauth2_callback_user_info_paths:email -
oauth2_token_url_method:POST -
oauth2_callback_user_info_paths: email -
oauth2_fetch_user_details: true -
oauth2_user_json_url:https://www.patreon.com/api/oauth2/v2/identity?include=memberships&fields[user]=email,full_name,vanity -
oauth2_json_user_id_path:data.id -
oauth2_json_name_path:data.attributes.full_name -
oauth2_json_username_path:data.attributes.vanity -
oauth2_json_email_path:data.attributes.email -
oauth2_json_email_verified_path:(deixe em branco) -
oauth2_email_verified: true (confie no provedor para reduzir prompts) Se alguns patronos não tiverem e-mail, defina como false e espere um prompt de inscrição. -
oauth2_email_verified:true -
oauth2_send_auth_header: true -
oauth2_send_auth_body: true -
oauth2_debug_auth:true -
oauth2_authorize_options: scope -
oauth2_scope:identity identity[email] campaigns campaigns.members -
oauth2_button_title:Login with with Patreon -
oauth2_allow_association_change: false (recomendado)
Passo 3: Nos controles de login principal do Discourse, configure o seguinte:
-
enable sso: false -
patreon login enabled: false (evita dois botões do Patreon; mantenha o plugin apenas para sincronização) -
allow new registrations: escolha:- true para permitir que novos patronos criem contas
- false para permitir que apenas usuários existentes do Discourse façam login
-
invite only: false durante os testes -
must approve users: false durante os testes -
session_cookie_domain: (em branco)
Passo 4: No seu arquivo yml do Discourse, configure o seguinte para rede e hosts.
-
DISCOURSE_HOSTNAMEemapp.yml:<seu_link_do_servidor_discourse> -
force_https: true
Passo 5: Reconstrua seu aplicativo para implementar as alterações:
cd /var/discourse
./launcher rebuild app
Resultado:
Agora você deve ter seu próprio botão funcional “Login com Patreon” via OAuth2 que realmente funciona na API v2 e sincroniza corretamente seus grupos de usuários com o Patreon.