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

长期以来,我们一直使用 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 个赞