Patreonでアカウントを認証しようとするとエラーが発生しました

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

Screenshot 2025-10-28 at 11.59.15 AM

しかし、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_HOSTNAME in app.yml: <your_discourse_server_link>

  • force_https: true

ステップ 5: アプリを再構築して変更を実装します。

cd /var/discourse
./launcher rebuild app

結果:
これで、Patreon と正しく同期する独自の動作する OAuth2 ログインボタン (Patreon) が API v2 で機能するようになり、ユーザーグループが Patreon と正しく同期されます。

「いいね!」 1