Per molto tempo abbiamo utilizzato il plugin Patreon con API V1 per Discourse per accedere con Patreon. Questa è la configurazione consigliata secondo la documentazione ufficiale del plugin Patreon di Discourse: https://meta.discourse.org/t/configure-patreon-integration-with-discourse/62380

Tuttavia, Patreon non supporta più la V1 da anni. Si rompe continuamente, non si sincronizza completamente e, più recentemente, ha smesso di funzionare per noi.
Il problema è che quando passiamo all’API V2 supportata da Patreon, l’autorizzazione degli utenti fallisce. Quando gli utenti tentano di fare clic su “Accedi con Patreon” e consentono all’API v2 di connettersi al loro account Patreon, ricevono questo errore:
Mi dispiace, si è verificato un errore durante il tentativo di autorizzare il tuo account con Patreon. Riprova.
E secondo la documentazione ufficiale del plugin Patreon per Discourse, si afferma specificamente che l’API v2 può causare questi errori di autenticazione. Ciò rende la v2 inutilizzabile.

Fortunatamente, abbiamo trovato una soluzione alternativa per far funzionare l’API v2. Questa soluzione dovrebbe essere aggiunta alla documentazione ufficiale perché al momento l’API v1, che è quella consigliata, è completamente rotta.
Soluzione
La soluzione è creare un OAuth2 personalizzato. Invece di utilizzare il pulsante “Accedi con Patreon” del plugin Patreon, gli utenti utilizzeranno un pulsante di accesso personalizzato che abbiamo creato e che si autenticherà con Patreon utilizzando il nostro oauth.
Passaggio 1: Aggiungi questi URI di reindirizzamento a Patreon.
Passaggio 2: In Discourse vai su Admin > Accesso e Autenticazione > OAuth2 e configura quanto segue:
-
oauth2_enabled: true
-
oauth2_client_id: <il_tuo_client_id_Patreon>
-
oauth2_client_secret: <il_tuo_client_secret_Patreon>
-
oauth2_authorize_url: https://www.patreon.com/oauth2/authorize
-
oauth2_authorize_signup_url: (lasciare vuoto)
-
oauth2_token_url: https://www.patreon.com/api/oauth2/token
-
oauth2_callback_user_id_path: (lasciare vuoto)
-
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: (lasciare vuoto)
-
oauth2_email_verified: true (fidati del provider per ridurre le richieste) Se alcuni patron non hanno un’email, imposta questo su false e attenditi una richiesta di registrazione.
-
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: Accedi con Patreon
-
oauth2_allow_association_change: false (consigliato)
Passaggio 3: Nei controlli di accesso principali di Discourse configura quanto segue:
-
enable sso: false
-
patreon login enabled: false (impedisce due pulsanti Patreon; mantieni il plugin solo per la sincronizzazione)
-
allow new registrations: scegli:
- true per consentire ai nuovi patron di creare account
- false per consentire solo agli utenti Discourse esistenti di accedere
-
invite only: false durante il test
-
must approve users: false durante il test
-
session_cookie_domain: (vuoto)
Passaggio 4: Nel tuo file yml di Discourse configura quanto segue per rete e host.
Passaggio 5: Ricostruisci la tua app per implementare le modifiche:
cd /var/discourse
./launcher rebuild app
Risultato:
Ora dovresti avere il tuo pulsante funzionante “Accedi con Patreon” tramite OAuth2 che funziona correttamente con l’API v2 e sincronizza correttamente i tuoi gruppi di utenti con Patreon.