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})

しかし、どうやらこの設定が保存されなくなったようです。以前は Ok が返っていたところ、現在は =>True が返っています。また、以前は考えられなかったことに、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回もメンションしてくれてありがとう…

PluginStore.set メソッドを使う代わりに、新しい UserAssociatedAccount を作成する必要があります。例えば以下のようにします:

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

@Falco さん、申し訳ありませんでした。コミュニティメンバーが休暇をとっている間、全員を最新の状態に保つことが難しく、私たちも同じように苦労しました。素晴らしい休暇を過ごされたことを願っております。改めてお詫び申し上げます。

明日、あなたの提案を試して、結果を共有いたします。ご協力いただき、ありがとうございます :pray:

こんにちは、@Falco さん。この件についてフォローアップです。上記の推奨コマンドを実行しようとすると、以下のようなエラーが表示されます。

root@ip-172-31-20-121-app:/var/www/discourse# rails c
NOTE: Inheriting Faraday::Error::ClientError is deprecated; use Faraday::ClientError instead. It will be removed in or after version 1.0
Faraday::Error::ClientError.inherited called from /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: ERROR:  duplicate key value violates unique constraint "associated_accounts_provider_uid"
DETAIL:  Key (provider_name, provider_uid)=(oauth2_basic, google-apps|nico@auth0.com) already exists.
from /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'
Caused by PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "associated_accounts_provider_uid"
DETAIL:  Key (provider_name, provider_uid)=(oauth2_basic, google-apps|nico@auth0.com) already exists.

from /var/www/discours