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

こんにちは

Discourse Patreon プラグインを使用していますが、問題が発生しました。統合は、Discourse と Patreon の両方で同じメールアドレスを持つユーザーにとっては完全に機能します。アカウントをリンクして正しいグループ/特典を取得できます。

しかし、Patreon と Discourse で異なるメールアドレスを持つユーザーの場合、Discourse プロファイルの「接続」ボタンから Patreon アカウントをリンクしようとすると、Patreon で承認した後に次のエラーが発生します。

申し訳ありませんが、Patreon でアカウントを承認しようとした際にエラーが発生しました。もう一度お試しください。

これは、デバイスやブラウザに関係なく発生します。

重要: プラグインはそれ以外は正常に機能しています。メールアドレスが一致するユーザーはペアリングされ、特典を受け取っています。したがって、クライアント ID、シークレット、リダイレクト URI はすべて正しく設定されています。

試したこと:

  • 手動でのグループ割り当て(同期によって削除されます)
  • すべてのプラグインと Patreon アプリの設定を再確認
  • 複数のデバイスとブラウザでテスト

メールアドレスが異なるユーザーが Patreon アカウントを既存の Discourse アカウントにリンクできるようにする方法、または少なくともこのエラーを回避する方法はありますか?

アドバイスやベストプラクティスがあれば、大いに感謝いたします。

ありがとうございます。


「いいね!」 2

長らく 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

お見事です、@watson さん!現時点では、あなたの解決策をこのトピックに移動しました。公式の Patreon プラグインの改善/修正に関するものなので、Feature に移動しました。もし他に1、2名があなたの手順を再現して確認できれば、公式の Patreon の指示を更新する必要があると思います。