長らく Discourse の Patreon プラグインで API V1 を使用して Patreon でサインインしていましたが、これは公式の Discourse Patreon プラグインのドキュメントで推奨されている設定です: Configure Patreon integration with Discourse

しかし、Patreon は V1 を長年サポートしておらず、常に問題が発生し、完全に同期せず、最近ではまったく機能しなくなりました。
問題は、Patreon がサポートしている API V2 に切り替えると、ユーザーの認証に失敗することです。ユーザーが「Patreon でログイン」をクリックして、API v2 が Patreon アカウントに接続することを許可すると、次のエラーが表示されます。
申し訳ありませんが、Patreon でアカウントを認証しようとした際にエラーが発生しました。もう一度お試しください。
そして、公式の Patreon プラグイン Discourse のドキュメントには、API v2 がこれらの認証エラーを引き起こす可能性があると specifically 記載されています。これは v2 を使用不能にします。
幸いなことに、API v2 を機能させるための回避策を見つけました。このソリューションは公式ドキュメントに追加されるべきです。なぜなら、現在推奨されている API v1 は完全に壊れているからです。
ソリューション
ソリューションは、カスタム OAuth2 を作成することです。ユーザーは Patreon プラグインの「Patreon でログイン」ボタンを使用する代わりに、独自の OAuth で Patreon と認証するカスタムログインボタンを使用します。
ステップ 1: Patreon にこれらのリダイレクト URI を追加します。
-
https://<your_discourse_server_link>/auth/oauth2_basic/callback -
https://<your_discourse_server_link>/auth/patreon/callback
ステップ 2: Discourse で Admin > ログインと認証 > OAuth2 に移動し、次のように設定します。
-
oauth2_enabled: true -
oauth2_client_id:<your Patreon client id> -
oauth2_client_secret:<your Patreon client secret> -
oauth2_authorize_url:https://www.patreon.com/oauth2/authorize -
oauth2_authorize_signup_url:(空白のまま) -
oauth2_token_url:https://www.patreon.com/api/oauth2/token -
oauth2_callback_user_id_path:(空白のまま) -
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:(空白のまま) -
oauth2_email_verified: true (プロンプトを減らすためにプロバイダーを信頼します) メールアドレスを持たないパトロンがいる場合は、これを false に設定し、サインアッププロンプトを予想してください。 -
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 (推奨)
ステップ 3: Discourse のコアログインコントロールで次のように設定します。
-
enable sso: false -
patreon login enabled: false (2つの Patreon ボタンを防ぎます。同期のみのためにプラグインを保持してください) -
allow new registrations: 次のいずれかを選択します。- 新しいパトロンがアカウントを作成できるようにするには true
- 既存の Discourse ユーザーのみがログインできるようにするには false
-
invite only: テスト中は false -
must approve users: テスト中は false -
session_cookie_domain: (空白)
ステップ 4: Discourse の yml ファイルで、ネットワークとホストについて次のように設定します。
-
DISCOURSE_HOSTNAMEinapp.yml:<your_discourse_server_link> -
force_https: true
ステップ 5: アプリを再構築して変更を実装します。
cd /var/discourse
./launcher rebuild app
結果:
これで、Patreon と正しく同期する独自の動作する OAuth2 ログインボタン (Patreon) が API v2 で機能するようになり、ユーザーグループが Patreon と正しく同期されます。
