التحقق من صحة مصادقة Discourse

|||
-|-|-|
:discourse2: | ملخص | Discourse Authentication Validations تتيح إضافة عمليات تحقق مخصصة لحقل المستخدم لتبديل عرض حقول المستخدم في نافذة التسجيل.
:hammer_and_wrench: | رابط المستودع | https://github.com/discourse/discourse-authentication-validations
:open_book: | دليل التثبيت | كيفية تثبيت الإضافات في Discourse

:information_source: حول

Discourse Authentication Validations تضيف القدرة على إضافة عمليات تحقق مخصصة لحقل المستخدم.

لا تحتوي حقول المستخدم المخصصة على أي نوع من التحقق توفرها النواة، بخلاف اكتشاف قيمة فارغة في حقل مطلوب. تضيف هذه الإضافة القدرة على تحديد تعبير عادي (regex)، لكل حقل مستخدم، والذي سيتم بعد ذلك فحصه مقابل قيمة الإدخال المقدمة.

بالإضافة إلى ذلك، تضيف هذه الإضافة القدرة على تبديل عرض حقول المستخدم في نافذة التسجيل. يتيح لك ذلك “ربط” حقول المستخدم معًا، بحيث لا يتم عرض حقل مستخدم إلا إذا كان حقل المستخدم السابق يحتوي على قيمة محددة.

:building_construction: الإعداد الأساسي

1. تمكين الإضافة

يمكن تمكين إضافة Discourse Authentication Validations إما عن طريق التبديل أو من إعداداتها، وكلاهما متاح من صفحة admin/plugins الخاصة بك.

2. إضافة تحقق مخصص لحقل مستخدم

بعد تمكين إضافة Discourse Authentication Validations، سترى مربع اختيار تضمين عمليات تحقق مخصصة في أسفل نموذج حقل المستخدم الخاص بك.

عند تحديده، سيعرض ثلاثة حقول إضافية:

  1. تعبير عادي للتحقق من القيمة (Value Validation Regex)
  2. عرض القيم (Show Values)
  3. حقول المستخدم المستهدفة (Target User Fields)

:closed_lock_with_key: إضافة تحقق مخصص

قم بتضمين تعبير عادي صالح في حقل Value Validation Regex:

سيتم الآن اختبار قيمة حقل المستخدم في نموذج التسجيل مقابل التعبير العادي الذي قمت بتضمينه. في حالة عدم استيفاء الإدخال لمعايير التعبير العادي المخصص الخاص بك، فلن يتم إرسال نموذج التسجيل.

لا توجد قيمة (يعتمد على التحقق الافتراضي للنموذج)

قيمة غير صحيحة

قيمة صحيحة

:link: ربط حقول المستخدم

أولاً، قم بتضمين قيمة Show Values في حقل مستخدم.

عندما يحتوي حقل المستخدم على قيمة Show Values، فإنه سيراقب قيمة الإدخال المرفق حتى تتطابق قيمة الإدخال مع أي من قيم show values. سيؤدي ذلك بعد ذلك إلى تبديل رؤية أي Target User Fields مضمنة، مما يجعلها مرئية.

ثانياً، قم بإضافة قيمة Target User Fields.

في القائمة المنسدلة Target User Fields، سترى قائمة بجميع حقول المستخدم المتاحة. أي حقل مستخدم تختاره سيتم تبديل رؤيته بواسطة القيم المقابلة في Show Values.

:hammer_and_wrench: ربط متقدم

يمكنك ربط حقول المستخدم معًا عن طريق إضافة عمليات تحقق مخصصة إلى حقول مستخدم متعددة.

على سبيل المثال، لنفترض أن لدينا ثلاثة حقول مستخدم بالقيم المعطاة:

الاسم هل يحتوي على تحقق مخصص عرض القيم حقول المستخدم المستهدفة
الإدخال الأول صحيح show-field-two الإدخال الثاني
الإدخال الثاني صحيح show-field-three الإدخال الثالث
الإدخال الثالث خطأ

سيتم إخفاء الإدخال الثاني والثالث افتراضيًا لأنهما “أبناء” للإدخال الأول. عند إضافة قيمة show value لـ show-field-two إلى الإدخال الأول، سيتم عرض الإدخال الثاني، ولكن سيظل الإدخال الثالث مخفيًا. سيظل مخفيًا حتى يحصل الإدخال الثاني على قيمة show-field-three.

مع التركيبة الصحيحة لـ Show Values و Target Classes، يمكنك تداخل حقول المستخدم بشكل لا نهائي تحت بعضها البعض.

18 إعجابًا

مرحباً @isaac.
أنا أحب هذه الإضافة، إنها بالضبط ما أحتاجه! هل ما زالت قيد الصيانة؟ أواجه مشكلة في وظيفة “السلسلة”.
لقد اتبعت المثال أعلاه باستخدام:


ولكنها تعرض جميع الحقول افتراضيًا… أعتذر إذا فاتني شيء في الشرح!

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

أعتذر عن هذا - المكون الإضافي يعمل. ومع ذلك، فإنه لا يعمل إذا كنت تشاهد عبر رابط دعوة للتسجيل. إنه يعمل إذا كنت تستخدم صفحة تسجيل عامة.

قد تكون ميزة لطيفة لجعل المنطق يعمل لكل من التسجيل بالدعوة والتسجيل العام!

عمل رائع مع المكون الإضافي!

5 إعجابات

أتفق بشدة. @tobiaseigen إذا اعتمدنا هذه الإضافة كميزة على نطاق أوسع، فسنرغب في أن يعمل المنطق في كلا المكانين (العام/الدعوة) كما أشار @kravitsjacob.

إعجابَين (2)

مرحباً @isaac. شكراً لك مرة أخرى على هذه الإضافة المذهلة - لقد فتحت بالفعل العديد من فرص المناقشة بالنسبة لي.

لقد واجهت خطأً بسيطاً - لاحظت أنه يتم حفظ استجابات الأسئلة، حتى لو تم إخفاء السؤال. وقد أدى ذلك إلى عدد قليل من المواقف غير المقصودة حيث يقوم المستخدمون بإرسال استجابات لا ينبغي أن تكون ممكنة في الواقع (ولهذا السبب أردنا إخفاء الأسئلة في المقام الأول). يتسبب هذا السلوك أيضاً في موقف آخر حيث عندما يتم تداخل سؤال مزدوج، فإنه لا يزال يظهر على الرغم من إلغاء تحديد الاستجابة الأصلية (لأنه لا يزال يعتقد أن الإجابة المشغلة محددة). أعرف أن هذا الوصف غامض بعض الشيء، لذا إليك صورة متحركة تسلط الضوء على هذا السلوك:

auth null bug

أعتقد أن الإصلاح الذي أريده هو إعادة تعيين الاستجابات إلى القيمة الفارغة بمجرد عدم ظهورها. يمكن أن يكون هذا أيضاً سلوكاً “اختيارياً” يمكن تهيئته من قبل الشخص الذي يقوم بإعداد النموذج - يمكنني رؤية فلسفات مختلفة موجودة حول ما إذا كان ينبغي أن تستمر الاستجابات عند النزول في هذه الأشجار.

هل يمكنك تنفيذ هذا؟ :pray:

5 إعجابات

شكراً على الرد المفصل! سألقي نظرة على هذا الأسبوع المقبل :slight_smile:

3 إعجابات

أتيحت لي الفرصة للنظر في هذه المشكلات اليوم :slight_smile:

يرجى قراءة وصف طلب السحب (PR) للحصول على التفاصيل!

3 إعجابات

من المستحيل حاليًا أن يكون لديك حقل مطلوب اختياري.

لدي حقل “الصناعة” وكلما تم تحديد “أخرى”، فإنه يكشف عن حقل “صناعة أخرى”.

ولكن عندما أجعل حقل “صناعة أخرى” مطلوبًا، لا يمكنني إرسال النموذج عندما يكون هذا الحقل مخفيًا.

عندما أقوم بإلغاء إخفاء div يدويًا، يمكنك رؤية أنه يتطلب هذا الإدخال، على الرغم من أن النموذج مخفي.

عندما أختار “أخرى”، وأملأ قيمة، ثم أختار صناعة أخرى بحيث يصبح الإدخال مخفيًا مرة أخرى، يمكنني إرسال النموذج. ثم يحدث نفس الموقف كما أشار @kravitsjacob: يتم حفظ قيمة حقل “صناعة أخرى” في ملف تعريف المستخدم، على الرغم من أن “الصناعة” غير محددة على أنها “أخرى”.

مسؤول المستخدم:

3 إعجابات

مرحباً @RGJ، هل تمكنت من حل المشكلة المتعلقة بالحقول المطلوبة؟ لدي نفس المشكلة.
@isaac، هل هناك أي حل بديل لهذا؟ لدي حقول يجب أن تكون مطلوبة بينما يتم إنشاء الشرط لجعلها مرئية.

لا، لم أتلق ردًا بشأن هذا الأمر ولم أقضِ أي وقت فيه بنفسي.

@RGJ، شكرًا لك على الرد السريع.
لقد أنشأت للتو طلب سحب (PR) إلى المستودع الأصلي مع إصلاح يجب أن يحل المشكلة.
كان التحدي الرئيسي هنا هو حقيقة أن لديك مكانين يتم فيهما تشغيل التحقق، وهما الواجهة الأمامية (Frontend) والواجهة الخلفية (Backend)، لذلك كان عليّ تطبيق حل لكل منهما على حدة والتأكد من أنهما يعملان كما هو متوقع.
آمل أن يساعد هذا شخصًا ما في المستقبل.