إنشاء حساب فقط للبريد الإلكتروني المسجل في قاعدة بياناتي الخارجية

أريد أن يتمكن فقط الأشخاص المسجلون على موقعي الخارجي من إنشاء حساب في منتدى Discourse الخاص بي. لا أعتقد أنه يمكنني استخدام واجهة برمجة تطبيقات SSO لأن موقعي لا يحتوي على مصادقة، بل هو مجرد تسجيل في قاعدة بيانات SQL.
هل يمكنني تطبيق شرط في عملية التسجيل بحيث يتمكن فقط الأشخاص المسجلون في قاعدة بيانات SQL الخاصة بي (موقعي) من التسجيل؟

أنا لست خبيرًا في discourse، لكن هناك العديد من الطرق للتعامل مع هذا الأمر، وإليك طريقة أتوقع أنها قد تنجح وأود استكشافها:

  1. اشتراط الموافقة على مستخدمين discourse الجدد
  2. تطوير سكريبت في موقعك البعيد أو في بيئة خادوم لا خادم (serverless) يستعلم عن شخص في قاعدة بياناتك، ثم يستدعي واجهة برمجة تطبيقات discourse للموافقة على المستخدم الجديد أو رفضه
  3. جعل discourse يقوم باستدعاء السكريبت عبر ويب هوك (webhook) عند وجود مستخدم جديد
  4. تخصيص صياغة discourse لوصف ما يحدث لمستخدميك بشكل أفضل

بشكل عام، توفر discourse واجهات ويب هوك وواجهات برمجة تطبيقات جيدة، لذا يمكنك استخدامها أثناء كتابة السكريبت المخصص عن بُعد بأي لغة تشعر بالراحة فيها.

إذا كنت مستعدًا لكتابة إضافة (plugin) لـ discourse بلغة Ruby، فسيكون ذلك فعالًا، لكن شخصيًا أنا لست كذلك، لذا أجد هذه الطريقة أسهل.

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

يمكنك بعد ذلك استخراج عناوين البريد الإلكتروني من قاعدة بيانات SQL الخاصة بك وإضافتها إلى ملف بصيغة CSV. يمكن استخدام هذا الملف لإرسال دعوات جماعية للمستخدمين باتباع الخطوات الموضحة هنا: إرسال دعوات جماعية للمستخدمين.

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

شكرًا لك يا جوناثان على فكرتك،
لم أستطع العثور على واجهة برمجة التطبيقات (API) المستخدمة للموافقة على التسجيل أو رفضه.

شكرًا لك يا سيمون،
المشكلة هي أن قاعدة البيانات واسعة وقابلة للتحديث،

عند البحث في قاعدة كود Discourse على GitHub، وجدت إجراءً يُدعى “approve_user” مثل put "/review/#{reviewable.id}/perform/approve_user.json". يبدو أنه قد تحتاج إلى استرجاع عناصر “reviewables” أولاً للحصول على معرف “reviewable” المطلوب.

إعجابَين (2)