您好,
我正在使用 Discourse Patreon 插件,遇到一个问题。对于在 Discourse 和 Patreon 上拥有相同电子邮件地址的用户,集成工作正常——他们可以链接他们的帐户并获得正确的组/福利。
但是,对于在 Patreon 和 Discourse 上拥有不同电子邮件地址的用户,当他们尝试通过 Discourse 配置文件中的“连接”按钮链接他们的 Patreon 帐户时,在 Patreon 上授权后会收到此错误:
对不起,在尝试使用 Patreon 授权您的帐户时出现错误。请重试。
无论设备或浏览器如何,都会发生这种情况。
重要提示:该插件否则工作正常——具有匹配电子邮件的用户已配对并获得福利,因此客户端 ID、密钥和重定向 URI 都已正确设置。
我已尝试:
- 手动分配组(会被同步移除)
- 重新检查所有插件和 Patreon 应用设置
- 在多个设备和浏览器上进行测试
是否有办法允许具有不同电子邮件地址的用户将其 Patreon 帐户链接到他们现有的 Discourse 帐户,或者至少避免此错误?
任何建议或最佳实践都将不胜感激!
谢谢!
2 个赞
Watson
(Watson)
4
长期以来,我们一直使用 Discourse 的 Patreon 插件和 API V1 来通过 Patreon 登录。这是官方 Discourse Patreon 插件文档推荐的设置:https://meta.discourse.org/t/configure-patreon-integration-with-discourse/62380

然而,Patreon 多年不再支持 V1。它经常出问题,无法完全同步,最近更是完全无法使用。
问题在于,当我们切换到 Patreon 支持的 API V2 时,它无法授权用户。当用户尝试点击“使用 Patreon 登录”并允许 API v2 连接到他们的 Patreon 账户时,他们会收到此错误:
对不起,在尝试通过 Patreon 授权您的帐户时出错。请重试。
根据官方 Patreon 插件 Discourse 文档,明确指出 API v2 可能会导致这些身份验证错误。这使得 v2 无法使用。

值得庆幸的是,我们找到了一个解决方法来让 API v2 正常工作。这个解决方案应该添加到官方文档中,因为目前推荐的 API v1 完全失效了。
解决方案
解决方案是创建一个自定义 OAuth2。用户将不使用 Patreon 插件的“使用 Patreon 登录”按钮,而是使用我们创建的自定义登录按钮,该按钮将使用我们自己的 OAuth 与 Patreon 进行身份验证。
步骤 1:将以下重定向 URI 添加到 Patreon。
步骤 2:在 Discourse 中转到“管理”>“登录与身份验证”>“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:使用 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:在您的 Discourse yml 文件中为网络和主机进行以下配置。
步骤 5:重建您的应用程序以实施更改:
cd /var/discourse
./launcher rebuild app
结果:
现在您应该拥有自己的有效的 OAuth2“使用 Patreon 登录”按钮,该按钮在 API v2 上正常工作,并能正确地将您的用户组与 Patreon 同步。
1 个赞
干得好,@watson!我现在把你的解决方案移到了这个话题下,并移到了 Feature 分类,因为它涉及到对官方 patreon 插件工作方式的改进/修复。如果有一两个人能够复制并确认你的步骤有效,那么我认为需要更新官方的 patreon 说明。