إعداد التسجيل وتسجيل الدخول باستخدام Auth0 عبر إضافة OAuth2 Basic

(oauth2_basic) فشل المصادقة! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | تم اكتشاف CSRF

هل لديك أي أفكار؟

هل من الممكن جعل Auth0 الطريقة الوحيدة المتاحة للتسجيل وتسجيل الدخول؟

نعم، قم فقط بتعطيل جميع طرق تسجيل الدخول الأخرى (بما في ذلك إعداد ‘تفعيل تسجيل الدخول المحلي’).

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

هل من الممكن إعادة التوجيه مباشرة إلى صفحة التسجيل في Auth0 دون عرض نموذج التسجيل الأساسي؟

إذا كنت ترغب في إخفاء واجهة تسجيل الدخول/إنشاء الحساب الخاصة بـ Discourse بالكامل، فيمكنك تعطيل إعداد الموقع تفعيل تسجيل الدخول المحلي.

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

شكرًا لك، ديفيد. لقد قمت بذلك، لكنني لاحظت أنه عند التسجيل باستخدام النافذة المنبثقة (modal) والعودة إلى Discourse، يُطلب مرة أخرى اسم المستخدم وتفاصيل أخرى، مما يوحي بأن Auth0 لا تمرر هذه المعلومات إلى Discourse. أتساءل عما إذا كان الحل هو الحفاظ على البساطة في النافذة المنبثقة الخاصة بـ Auth0 من خلال تضمين عنوان البريد الإلكتروني وكلمة المرور فقط للتسجيل، ثم جمع باقي التفاصيل داخل Discourse. المشكلة هي أننا نريد الاحتفاظ ببيانات المستخدم في مكان واحد باستخدام قاعدة بيانات مخصصة مرتبطة بـ Auth0.

كيف يمكنني تعيين إعادة التوجيه بعد تسجيل الخروج؟ لم أستطع العثور على أي شيء متعلق بتسجيل الخروج.

لتطلب التحقق من عنوان البريد الإلكتروني فقط إذا لم يؤكده المستخدم بالفعل في Auth0، فإن قيمة مسار البريد الإلكتروني للتحقق من صحة oauth2 هي email_verified.

لقد وجدت هذا عن طريق تمكين إعداد تصحيح أخطاء oauth2 وفحص السجلات على <DISCOURSE_URL>/logs. عندما سجلت الدخول باستخدام حساب غير مؤكد، بدا الجسم كالتالي:

تصحيح أخطاء OAuth2:
user_json: {
  "sub"=>"auth0|XXXXXX",
  "nickname"=>"YYYYY+unprovenauth",
  "name"=>"YYYYYY+unprovenauth@ZZZZZZ.com",
  "picture"=>"https://via.placeholder.com/150",
  "updated_at"=>"2022-09-21T07:50:40.172Z",
  "email"=>"YYYYYY+unprovenauth@ZZZZZZ.com",
  "email_verified"=>false
}
إعجاب واحد (1)

@david
آمل أن تتمكن من المساعدة - أود تكوين Discourse لتسجيل الدخول باستخدام تسجيل دخول Microsoft XBL واعتقدت أن هذا المكون الإضافي قد يكون طريقة جيدة للبدء.

لقد نشرت هذا الموضوع في dev:

يوجد منتدى Minecraft Discourse يسمى “The Hive” يستخدم ما نريد القيام به - أنا فقط لا أستطيع العثور على مكون إضافي له. :slight_smile:

أهلاً بك!

هل هناك طريقة لفرض تسجيل الدخول للنشر في المجتمع، مع السماح بعرض المنشورات دون الحاجة لتسجيل الدخول؟

لقد قمنا بتمكين إضافة Auth0 لمجتمعنا. وأزلنا جميع أشكال تسجيل الدخول الأخرى والنشر المجهول - نريد بشكل أساسي التأكد من أن الأشخاص هم عملاء لدينا قبل أن ينشروا في مجتمع المستخدمين. ولكننا لا نزال نرغب في أن تكون المنشورات قابلة للعرض من قبل الآخرين حتى لو لم يقوموا بتسجيل الدخول.

الطريقة التي تمكنت بها من جعل إضافة Auth0 تعمل، تتطلب منك تسجيل الدخول أولاً قبل حتى عرض المحتوى. هل فاتني مفتاح تبديل أو شيء من هذا القبيل؟

شكراً!

يبدو أنك قمت بتفعيل خيار login required. عند تفعيله، يمكن فقط للأشخاص الذين لديهم حساب عرض منشورات المنتدى. يجب أن تكون قادرًا على استخدام SSO دون الحاجة إلى تفعيل هذا الخيار. :+1:

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

هل هناك طريقة لمنع تسليمها إلى المجتمع قبل التحقق من صحة البريد الإلكتروني؟

أواجه بعض المشكلات في إعداد هذا. بعد تمكين كل شيء ثم المرور بعملية التسجيل على Discourse الخاص بي، يتم إرسالها إلى Auth0 بشكل جيد ولكن عندما أعود أرى رسالة خطأ (“عفوًا، واجه البرنامج الذي يدعم منتدى المناقشة هذا مشكلة غير متوقعة. نعتذر عن الإزعاج.”).

بالنظر إلى السجلات أرى ما أعتقد أنه الخطأ:

ActiveRecord::NotNullViolation (PG::NotNullViolation: ERROR: null value in column "provider_uid" of relation "user_associated_accounts" violates not-null constraint

لقد تحققت مرة أخرى من أنني قمت بتكوين كل شيء وفقًا للتعليمات، ويبدو أن هذه المشكلة قد تكون ناتجة عن كون “مسار معرف مستخدم OAuth2 JSON” خاطئًا وأن هذا الحقل فارغ؟ لقد قمت بتعيينه على sub.

بافتراض أن مُعرّف المزود (IDP) يوفر حقولًا منفصلة مثل user.name.first و user.name.last، بدلاً من user.name.full كما هو مُعطى في مثال وصف الحقل…

هل سيكون من الممكن دمج قيمة مسار اسم OAuth2 JSON من مسارات بيانات مستخدم JSON متعددة؟