Pendant très longtemps, nous avons utilisé le plugin patreon avec l’API V1 pour Discourse afin de nous connecter avec Patreon. C’est la configuration recommandée selon la documentation officielle du plugin patreon de Discourse : https://meta.discourse.org/t/configure-patreon-integration-with-discourse/62380

Cependant, Patreon ne prend plus en charge la V1 depuis des années. Elle est constamment défaillante, ne se synchronise pas entièrement, et récemment, elle ne fonctionnait tout simplement plus pour nous.
Le problème est que lorsque nous passons à l’API V2, prise en charge par Patreon, l’autorisation des utilisateurs échoue. Lorsque les utilisateurs essaient de cliquer sur “Se connecter avec Patreon” et autorisent l’API v2 à se connecter à leur compte Patreon, ils reçoivent cette erreur :
Désolé, une erreur s’est produite lors de la tentative d’autorisation de votre compte avec Patreon. Veuillez réessayer.
Et selon la documentation officielle du plugin patreon pour Discourse, il est spécifiquement indiqué que l’API v2 peut causer ces erreurs d’authentification. Ce qui rend la v2 inutilisable.

Heureusement, nous avons trouvé une solution de contournement pour faire fonctionner l’API v2. Cette solution devrait être ajoutée à la documentation officielle car actuellement, l’API v1, qui est recommandée, est complètement défaillante.
Solution
La solution consiste à créer un OAuth2 personnalisé. Au lieu que les utilisateurs utilisent le bouton “Se connecter avec Patreon” du plugin patreon, ils utiliseront un bouton de connexion personnalisé que nous avons créé et qui s’authentifiera avec Patreon en utilisant notre propre OAuth.
Étape 1 : Ajoutez ces URI de redirection à Patreon.
Étape 2 : Dans Discourse, allez dans Admin > Connexion et authentification > OAuth2 et configurez ce qui suit :
-
oauth2_enabled : true
-
oauth2_client_id : <votre_client_id_Patreon>
-
oauth2_client_secret : <votre_client_secret_Patreon>
-
oauth2_authorize_url : https://www.patreon.com/oauth2/authorize
-
oauth2_authorize_signup_url : (laisser vide)
-
oauth2_token_url : https://www.patreon.com/api/oauth2/token
-
oauth2_callback_user_id_path : (laisser vide)
-
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 : (laisser vide)
-
oauth2_email_verified : true (fait confiance au fournisseur pour réduire les invites) Si certains patrons n’ont pas d’e-mail, définissez cette option sur false et attendez-vous à une invite d’inscription.
-
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 : Se connecter avec Patreon
-
oauth2_allow_association_change : false (recommandé)
Étape 3 : Dans les contrôles de connexion de base de Discourse, configurez ce qui suit :
-
enable sso : false
-
patreon login enabled : false (empêche deux boutons Patreon ; conservez le plugin uniquement pour la synchronisation)
-
allow new registrations : choisissez :
- true pour permettre aux nouveaux patrons de créer des comptes
- false pour n’autoriser que les utilisateurs Discourse existants à se connecter
-
invite only : false pendant les tests
-
must approve users : false pendant les tests
-
session_cookie_domain : (vide)
Étape 4 : Dans votre fichier yml Discourse, configurez ce qui suit pour le réseau et les hôtes.
Étape 5 : Reconstruisez votre application pour implémenter les changements :
cd /var/discourse
./launcher rebuild app
Résultat :
Vous devriez maintenant avoir votre propre bouton de connexion OAuth2 fonctionnel avec Patreon qui fonctionne réellement avec l’API v2 et qui synchronise correctement vos groupes d’utilisateurs avec Patreon.