Ошибка при попытке авторизовать ваш аккаунт в Patreon

Привет,

Я использую плагин Discourse для Patreon и столкнулся с проблемой. Интеграция работает идеально для пользователей, у которых на Discourse и Patreon указан один и тот же адрес электронной почты — они могут связать свои аккаунты и получают соответствующие группы и преимущества.

Однако, если у пользователя на Patreon и Discourse разные адреса электронной почты, при попытке связать аккаунт Patreon через кнопку «Подключить» в профиле Discourse после авторизации на Patreon появляется следующая ошибка:

Извините, произошла ошибка при попытке авторизации вашего аккаунта в Patreon. Пожалуйста, попробуйте снова.

Это происходит независимо от устройства или браузера.

Важно: плагин в целом работает — пользователи с совпадающими адресами электронной почты связываются и получают свои преимущества, значит Client ID, Secret и Redirect URI настроены правильно.

Что я уже пробовал:

  • Ручное назначение групп (удаляется при синхронизации)
  • Повторная проверка всех настроек плагина и приложения Patreon
  • Тестирование на нескольких устройствах и в разных браузерах

Есть ли способ разрешить пользователям с разными адресами электронной почты связывать аккаунт Patreon с существующим аккаунтом Discourse или хотя бы избежать этой ошибки?

Буду очень благодарен за любые советы или рекомендации по лучшим практикам!

Спасибо!


2 лайка

Долгое время мы использовали плагин Patreon с API V1 для входа в Discourse через Patreon. Это рекомендуемая настройка согласно официальной документации плагина Patreon для Discourse: 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 может вызывать такие ошибки аутентификации. Это делает v2 непригодным для использования.

К счастью, мы нашли обходной путь, чтобы заставить API v2 работать. Это решение должно быть добавлено в официальную документацию, поскольку в настоящее время API v1, который рекомендуется, полностью неработоспособен.

Решение

Решение заключается в создании кастомной OAuth2-аутентификации. Вместо того чтобы пользователи использовали кнопку «Войти через Patreon» из плагина Patreon, они будут использовать нашу собственную кнопку входа, которая будет выполнять аутентификацию через Patreon с использованием нашего собственного OAuth.

Шаг 1: Добавьте следующие URI перенаправления в Patreon.

  • https://<ваша_ссылка_на_сервер_discourse>/auth/oauth2_basic/callback

  • https://<ваша_ссылка_на_сервер_discourse>/auth/patreon/callback

Шаг 2: В Discourse перейдите в Администрирование > Вход и аутентификация > OAuth2 и настройте следующие параметры:

  • oauth2_enabled: true

  • oauth2_client_id: <ваш client_id Patreon>

  • oauth2_client_secret: <ваш client_secret Patreon>

  • 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 (доверяйте провайдеру, чтобы уменьшить количество запросов). Если у некоторых патронов нет email, установите это значение в 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: Войти через Patreon

  • oauth2_allow_association_change: false (рекомендуется)

Шаг 3: В основных настройках входа Discourse настройте следующее:

  • enable sso: false

  • patreon login enabled: false (предотвращает появление двух кнопок Patreon; оставляйте плагин только для синхронизации)

  • allow new registrations: выберите:

    • true, чтобы новые патроны могли создавать аккаунты

    • false, чтобы разрешить вход только существующим пользователям Discourse

  • invite only: false во время тестирования

  • must approve users: false во время тестирования

  • session_cookie_domain: (пусто)

Шаг 4: В вашем файле yml Discourse настройте следующие параметры для сети и хостов.

  • DISCOURSE_HOSTNAME в app.yml: <ваша_ссылка_на_сервер_discourse>

  • force_https: true

Шаг 5: Пересоберите приложение, чтобы применить изменения:

cd /var/discourse
./launcher rebuild app

Результат:

Теперь у вас должна быть собственная рабочая кнопка входа через OAuth2 с Patreon, которая действительно работает с API v2 и правильно синхронизирует ваши группы пользователей с Patreon.

1 лайк

Отличная работа, @watson! Я пока переместил ваше решение в эту тему и перевёл его в #feature, так как речь идёт об улучшении/исправлении работы официального плагина Patreon. Если один или два других пользователя смогут воспроизвести ситуацию и подтвердить, что ваши шаги работают, то, думаю, потребуется обновление официальных инструкций по Patreon.