Durante mucho tiempo hemos estado utilizando el plugin de Patreon con la API V1 para Discourse para iniciar sesión con Patreon. Esta es la configuración recomendada según la documentación oficial del plugin de Discourse de Patreon: https://meta.discourse.org/t/configure-patreon-integration-with-discourse/62380

Sin embargo, Patreon no ha admitido la V1 durante años. Se rompe constantemente, no se sincroniza completamente y, recientemente, simplemente dejó de funcionar para nosotros.
El problema es que cuando cambiamos a la API V2, que es compatible con Patreon, falla al autorizar a los usuarios. Cuando los usuarios intentan hacer clic en “Iniciar sesión con Patreon” y permiten que la API v2 se conecte a su cuenta de Patreon, reciben este error:
Lo sentimos, hubo un error al intentar autorizar tu cuenta con Patreon. Por favor, inténtalo de nuevo.
Y según la documentación oficial del plugin de Discourse de Patreon, se indica específicamente que la API v2 puede causar estos errores de autenticación. Lo que hace que la v2 sea inutilizable.

Afortunadamente, encontramos una solución para que la API v2 funcione. Esta solución debería agregarse a la documentación oficial porque en este momento la API v1, que es lo que se recomienda, está completamente rota.
Solución
La solución es crear un OAuth2 personalizado. En lugar de que los usuarios utilicen el botón “Iniciar sesión con Patreon” del plugin de Patreon, utilizarán un botón de inicio de sesión personalizado que hemos creado y que se autenticará con Patreon utilizando nuestro propio oauth.
Paso 1: Agrega estas URIs de redirección a Patreon.
Paso 2: En Discourse, ve a Admin > Inicio de sesión y autenticación > OAuth2 y configura lo siguiente:
-
oauth2_enabled: true
-
oauth2_client_id: <tu_id_cliente_Patreon>
-
oauth2_client_secret: <tu_secreto_cliente_Patreon>
-
oauth2_authorize_url: https://www.patreon.com/oauth2/authorize
-
oauth2_authorize_signup_url: (dejar en blanco)
-
oauth2_token_url: https://www.patreon.com/api/oauth2/token
-
oauth2_callback_user_id_path: (dejar en blanco)
-
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: (dejar en blanco)
-
oauth2_email_verified: true (confiar en el proveedor para reducir las indicaciones) Si algunos mecenas carecen de correo electrónico, configúralo en false y espera una indicación de registro.
-
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: Iniciar sesión con Patreon
-
oauth2_allow_association_change: false (recomendado)
Paso 3: En los controles de inicio de sesión principales de Discourse, configura lo siguiente:
-
enable sso: false
-
patreon login enabled: false (evita dos botones de Patreon; mantén el plugin solo para sincronización)
-
allow new registrations: elige:
- true para permitir que los nuevos mecenas creen cuentas
- false para permitir que solo los usuarios existentes de Discourse inicien sesión
-
invite only: false mientras se prueba
-
must approve users: false mientras se prueba
-
session_cookie_domain: (en blanco)
Paso 4: En tu archivo yml de Discourse, configura lo siguiente para redes y hosts.
Paso 5: Reconstruye tu aplicación para implementar los cambios:
cd /var/discourse
./launcher rebuild app
Resultado:
Ahora deberías tener tu propio botón funcional de “Iniciar sesión con Patreon” de OAuth2 que realmente funciona en la API v2 y que sincroniza correctamente tus grupos de usuarios con Patreon.