Discourse 内的 0Auth2 用户关联

偶尔,用户在尝试登录时会遇到每次都被要求设置新 Discourse 账户的问题。这种情况通常发生在以下两种场景:一是旧账户现在重新登录 Discourse;二是用户原本使用用户名和密码注册,现在却尝试通过 OAuth 登录。过去,解决此问题的方法是在 Discourse 实例的 Rails 控制台中运行以下命令,将他们的 Auth0 OAuth2 凭据与 Discourse 中的用户 ID 关联:

PluginStore.set('oauth2_basic', 'oauth2_basic_user_google-apps|tony.danza@aol.com', {"user_id":7235})

但问题似乎是该操作不再生效,实际上它返回的是 =>True,而以前会返回 Ok。我现在处于 Pry 提示符下,而过去我认为并非如此。当我退出 Pry 时,它也会将我带出 Rails 控制台。

请问这可能是什么原因?谢谢!

使用的插件:GitHub - discourse/discourse-oauth2-basic: A basic OAuth2 plugin for use with Discourse · GitHub

该命令已过时,现在插件使用用户关联表。

您能否分享一个我现在将用来替换它的命令示例 @Falco?感谢您的帮助 :bowing_man:

跟进最新指令 @Falco,谢谢!

关于 @Falco 命令,有任何更新或进展吗?

此文件应能为您提供如何构建所需命令的思路:

抱歉回复晚了,我在再次尝试之前不得不升级 Discourse。我试了一下这个改动,但没有成功。下面是我之后尝试的示例,它返回了 true

[1] pry(main)> PluginStore.set('oauth2_basic', 'user_associated_accounts_google-apps|tony.danza@gmail.com', {"user_id":1234})
=> true

就这个话题跟进一下,谢谢你的帮助!

该死,我休假期间你居然@了我 7 次……

你需要创建一个新的 UserAssociatedAccount,而不是使用 PluginStore.set 方法,例如:

UserAssociatedAccount.create!(provider_name: 'oauth2_basic', provider_uid: 'google-apps|tony.danza@aol.com', user_id: 7235)

很抱歉,@Falco。我们也曾遇到过社区成员休假时难以让所有人保持同步的困难。希望你度过了一个愉快的假期,对此我深表歉意。

我明天会尝试你的建议,并分享结果。再次感谢你的帮助::folded_hands:

嘿,@Falco,跟进一下这件事。当我尝试运行上面建议的命令时,收到以下信息:

root@ip-172-31-20-121-app:/var/www/discourse# rails c
NOTE: 继承 Faraday::Error::ClientError 已弃用;请使用 Faraday::ClientError。它将在 1.0 版本或之后被移除。
Faraday::Error::ClientError.inherited 调用自 /var/www/discourse/plugins/discourse-github/gems/2.6.5/gems/octokit-4.14.0/lib/octokit/middleware/follow_redirects.rb:14。
[1] pry(main)> UserAssociatedAccount.create!(provider_name: 'oauth2_basic', provider_uid: 'google-apps|nico@auth0.com', user_id: 1722)
ActiveRecord::RecordNotUnique: PG::UniqueViolation: 错误:重复键值违反了唯一约束 "associated_accounts_provider_uid"
详情:键 (provider_name, provider_uid)=(oauth2_basic, google-apps|nico@auth0.com) 已存在。
来自 /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.3/lib/patches/db/pg.rb:69:in `async_exec_params'
由 PG::UniqueViolation 引起:错误:重复键值违反了唯一约束 "associated_accounts_provider_uid"
详情:键 (provider_name, provider_uid)=(oauth2_basic, google-apps|nico@auth0.com) 已存在。

来自 /var/www/discours