Привязка пользователей OAuth2 в Discourse

Иногда пользователи сталкиваются с проблемой, при которой при каждой попытке входа им предлагают создать новую учётную запись Discourse. Это чаще всего происходит либо с устаревшими аккаунтами, которые только сейчас возвращаются к входу в Discourse, либо когда пользователь регистрировался с помощью имени пользователя и пароля, а теперь пытается войти через OAuth. Раньше для решения этой проблемы необходимо было связать учётные данные Auth0 OAuth2 с идентификатором пользователя в Discourse, выполнив следующую команду из консоли Rails внутри экземпляра Discourse:

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 раз, пока я был в отпуске…

Вместо использования метода 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