尝试使用 Patreon 授权您的帐户时出错

您好,

我正在使用 Discourse Patreon 插件,遇到一个问题。对于在 Discourse 和 Patreon 上拥有相同电子邮件地址的用户,集成工作正常——他们可以链接他们的帐户并获得正确的组/福利。

但是,对于在 Patreon 和 Discourse 上拥有不同电子邮件地址的用户,当他们尝试通过 Discourse 配置文件中的“连接”按钮链接他们的 Patreon 帐户时,在 Patreon 上授权后会收到此错误:

对不起,在尝试使用 Patreon 授权您的帐户时出现错误。请重试。

无论设备或浏览器如何,都会发生这种情况。

重要提示:该插件否则工作正常——具有匹配电子邮件的用户已配对并获得福利,因此客户端 ID、密钥和重定向 URI 都已正确设置。

我已尝试:

  • 手动分配组(会被同步移除)
  • 重新检查所有插件和 Patreon 应用设置
  • 在多个设备和浏览器上进行测试

是否有办法允许具有不同电子邮件地址的用户将其 Patreon 帐户链接到他们现有的 Discourse 帐户,或者至少避免此错误?

任何建议或最佳实践都将不胜感激!

谢谢!


2 个赞

长期以来,我们一直使用 Discourse 的 Patreon 插件和 API V1 来通过 Patreon 登录。这是官方 Discourse Patreon 插件文档推荐的设置:https://meta.discourse.org/t/configure-patreon-integration-with-discourse/62380

Screenshot 2025-10-28 at 11.59.15 AM

然而,Patreon 多年不再支持 V1。它经常出问题,无法完全同步,最近更是完全无法使用。

问题在于,当我们切换到 Patreon 支持的 API V2 时,它无法授权用户。当用户尝试点击“使用 Patreon 登录”并允许 API v2 连接到他们的 Patreon 账户时,他们会收到此错误:

对不起,在尝试通过 Patreon 授权您的帐户时出错。请重试。

根据官方 Patreon 插件 Discourse 文档,明确指出 API v2 可能会导致这些身份验证错误。这使得 v2 无法使用。

Screenshot 2025-10-28 at 12.05.06 PM

值得庆幸的是,我们找到了一个解决方法来让 API v2 正常工作。这个解决方案应该添加到官方文档中,因为目前推荐的 API v1 完全失效了。

解决方案

解决方案是创建一个自定义 OAuth2。用户将不使用 Patreon 插件的“使用 Patreon 登录”按钮,而是使用我们创建的自定义登录按钮,该按钮将使用我们自己的 OAuth 与 Patreon 进行身份验证。

步骤 1:将以下重定向 URI 添加到 Patreon。

  • https://<your_discourse_server_link>/auth/oauth2_basic/callback

  • https://<your_discourse_server_link>/auth/patreon/callback

步骤 2:在 Discourse 中转到“管理”>“登录与身份验证”>“OAuth2”并进行以下配置:

  • oauth2_enabledtrue

  • oauth2_client_id<your Patreon client id>

  • oauth2_client_secret<your Patreon client secret>

  • oauth2_authorize_urlhttps://www.patreon.com/oauth2/authorize

  • oauth2_authorize_signup_url:(留空)

  • oauth2_token_urlhttps://www.patreon.com/api/oauth2/token

  • oauth2_callback_user_id_path(留空)

  • oauth2_callback_user_info_pathsemail

  • oauth2_token_url_method: POST

  • oauth2_callback_user_info_paths: email

  • oauth2_fetch_user_detailstrue

  • oauth2_user_json_urlhttps://www.patreon.com/api/oauth2/v2/identity?include=memberships&fields[user]=email,full_name,vanity

  • oauth2_json_user_id_pathdata.id

  • oauth2_json_name_pathdata.attributes.full_name

  • oauth2_json_username_pathdata.attributes.vanity

  • oauth2_json_email_pathdata.attributes.email

  • oauth2_json_email_verified_path(留空)

  • oauth2_email_verifiedtrue (信任提供商以减少提示) 如果某些赞助者缺少电子邮件,请将其设置为 false 并期望出现注册提示。

  • oauth2_email_verified: true

  • oauth2_send_auth_headertrue

  • oauth2_send_auth_bodytrue

  • oauth2_debug_auth: true

  • oauth2_authorize_options: scope

  • oauth2_scopeidentity identity[email] campaigns campaigns.members

  • oauth2_button_title使用 Patreon 登录

  • oauth2_allow_association_changefalse (推荐)

步骤 3:在 Discourse 核心登录控件中进行以下配置:

  • enable ssofalse

  • patreon login enabledfalse (防止出现两个 Patreon 按钮;仅保留插件用于同步)

  • allow new registrations:选择:

    • true 允许新的赞助者创建账户
    • false 仅允许现有 Discourse 用户登录
  • invite only:测试期间为 false

  • must approve users:测试期间为 false

  • session_cookie_domain:(留空)

步骤 4:在您的 Discourse yml 文件中为网络和主机进行以下配置。

  • DISCOURSE_HOSTNAMEapp.yml 中:<your_discourse_server_link>

  • force_httpstrue

步骤 5:重建您的应用程序以实施更改:

cd /var/discourse
./launcher rebuild app

结果:

现在您应该拥有自己的有效的 OAuth2“使用 Patreon 登录”按钮,该按钮在 API v2 上正常工作,并能正确地将您的用户组与 Patreon 同步。

1 个赞

干得好,@watson!我现在把你的解决方案移到了这个话题下,并移到了 Feature 分类,因为它涉及到对官方 patreon 插件工作方式的改进/修复。如果有一两个人能够复制并确认你的步骤有效,那么我认为需要更新官方的 patreon 说明。