Schon seit langem verwenden wir das Patreon-Plugin mit API V1 für Discourse, um uns mit Patreon anzumelden. Dies ist die empfohlene Einrichtung gemäß der offiziellen Dokumentation des Discourse-Patreon-Plugins: https://meta.discourse.org/t/configure-patreon-integration-with-discourse/62380

Patreon unterstützt V1 jedoch seit Jahren nicht mehr. Es funktioniert ständig nicht, es synchronisiert nicht vollständig und kürzlich hat es für uns einfach nicht mehr funktioniert.
Das Problem ist, dass es beim Wechsel zu API V2, das von Patreon unterstützt wird, fehlschlägt, Benutzer zu autorisieren. Wenn Benutzer versuchen, auf “Mit Patreon anmelden” zu klicken und API v2 die Verbindung zu ihrem Patreon-Konto erlauben, erhalten sie diese Fehlermeldung:
Entschuldigung, es gab einen Fehler bei der Autorisierung Ihres Kontos bei Patreon. Bitte versuchen Sie es erneut.
Und gemäß der offiziellen Dokumentation des Patreon-Plugin-Discourse heißt es ausdrücklich, dass API v2 diese Authentifizierungsfehler verursachen kann. Was v2 unbrauchbar macht.

Glücklicherweise haben wir eine Lösung gefunden, um API v2 zum Laufen zu bringen. Diese Lösung sollte zur offiziellen Dokumentation hinzugefügt werden, da derzeit API v1, was empfohlen wird, vollständig defekt ist.
Lösung
Die Lösung besteht darin, ein benutzerdefiniertes OAuth2 zu erstellen. Anstatt dass Benutzer die Schaltfläche “Mit Patreon anmelden” des Patreon-Plugins verwenden, verwenden sie eine von uns erstellte benutzerdefinierte Anmeldeschaltfläche, die sich mit Patreon über unser eigenes OAuth authentifiziert.
Schritt 1: Fügen Sie diese Redirect-URIs zu Patreon hinzu.
Schritt 2: Gehen Sie in Discourse zu Admin > Anmelden & Authentifizierung > OAuth2 und konfigurieren Sie Folgendes:
-
oauth2_enabled: true
-
oauth2_client_id: <deine Patreon-Client-ID>
-
oauth2_client_secret: <dein Patreon-Client-Secret>
-
oauth2_authorize_url: https://www.patreon.com/oauth2/authorize
-
oauth2_authorize_signup_url: (leer lassen)
-
oauth2_token_url: https://www.patreon.com/api/oauth2/token
-
oauth2_callback_user_id_path: (leer lassen)
-
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: (leer lassen)
-
oauth2_email_verified: true (Provider vertrauen, um Aufforderungen zu reduzieren) Wenn einige Patrons keine E-Mail haben, setzen Sie dies auf false und erwarten Sie eine Anmeldeaufforderung.
-
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: Mit Patreon anmelden
-
oauth2_allow_association_change: false (empfohlen)
Schritt 3: Konfigurieren Sie in den Kern-Login-Steuerelementen von Discourse Folgendes:
-
enable sso: false
-
patreon login enabled: false (verhindert zwei Patreon-Schaltflächen; Plugin nur für die Synchronisierung beibehalten)
-
allow new registrations: wählen Sie:
- true, um neuen Patrons die Erstellung von Konten zu ermöglichen
- false, um nur bestehenden Discourse-Benutzern die Anmeldung zu ermöglichen
-
invite only: false während des Testens
-
must approve users: false während des Testens
-
session_cookie_domain: (leer)
Schritt 4: Konfigurieren Sie in Ihrer Discourse-yml-Datei Folgendes für Netzwerk und Hosts.
Schritt 5: Bauen Sie Ihre App neu, um die Änderungen zu implementieren:
cd /var/discourse
./launcher rebuild app
Ergebnis:
Jetzt sollten Sie Ihre eigene funktionierende OAuth2-Anmeldeschaltfläche “Mit Patreon anmelden” haben, die tatsächlich mit API v2 funktioniert und Ihre Benutzergruppen ordnungsgemäß mit Patreon synchronisiert.