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.
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.
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.