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

هذه الأوامر قديمة، الآن يستخدم الإضافة جدول ارتباطات المستخدمين.

هل يمكنك مشاركة مثال على الأمر الذي سأقوم بتشغيله الآن بدلاً من @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
ملاحظة: إن توريث 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