ربط مستخدم 0Auth2 داخل 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

That command is outdated, now the plugin uses the user associations table.

إعجاب واحد (1)

Can you share an example of the command that I will now run @Falco in replacement of it? Thank you for you help :bowing_man:

Following up for the latest command @Falco, thanks!

Any update or insight on the command @Falco?

This file shound give you an idea of how to construct the command you need:

إعجاب واحد (1)

Sorry for the delay, I had to upgrade discourse before I tried again. I gave the change a shot but didn’t experience success. Below is the example of what I have since tried that return true.

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

Following up on this topic, thanks for the help!

Damn you pinged me 7 times while I was on vacation…

Instead of using the PluginStore.set method, you need to create a new UserAssociatedAccount, like for example:

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

Sorry about that @Falco, we too have had a hard time when having Community members go on vacation and not being able to keep everyone in the loop. I hope you had a great vacation and I apologize.

I will give your suggestion a go tomorrow and share the results. Thank you again for your help :pray:

Hey there @Falco, following up on this front. When I try to run the above suggested command I receive the below:

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