Erro ao tentar autorizar sua conta com o Patreon

Olá,

Estou usando o plugin Discourse Patreon e encontrei um problema. A integração funciona perfeitamente para usuários que têm o mesmo endereço de e-mail no Discourse e no Patreon – eles podem vincular suas contas e obter o grupo/benefícios corretos.

No entanto, para usuários que têm um e-mail diferente no Patreon e no Discourse, quando tentam vincular sua conta do Patreon através do botão “Conectar” no perfil do Discourse, eles recebem este erro após autorizar no Patreon:

Desculpe, ocorreu um erro ao tentar autorizar sua conta com o Patreon. Por favor, tente novamente.

Isso acontece independentemente do dispositivo ou navegador.

Importante: O plugin está funcionando de outra forma – usuários com e-mails correspondentes são pareados e recebem seus benefícios, então Client ID, Secret e Redirect URI estão todos configurados corretamente.

O que tentei:

  • Atribuição manual de grupo (é removida pela sincronização)
  • Verificação de todas as configurações do plugin e do aplicativo Patreon
  • Teste em múltiplos dispositivos e navegadores

Existe uma maneira de permitir que usuários com e-mails diferentes vinculem sua conta do Patreon à sua conta existente do Discourse, ou pelo menos para evitar este erro?

Qualquer conselho ou melhores práticas seria muito apreciado!

Obrigado!


2 curtidas

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

Screenshot 2025-10-28 at 11.59.15 AM

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.

Screenshot 2025-10-28 at 12.05.06 PM

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_HOSTNAME em app.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.

1 curtida

Bom trabalho, @watson! Movi sua solução para este tópico por enquanto e a movi para Feature porque se trata de uma melhoria/correção em como o plugin oficial do patreon funciona. Se uma ou duas outras pessoas conseguirem replicar e confirmar que seus passos funcionam, então acho que uma atualização será necessária nas instruções oficiais do patreon.