ندير مجموعة من الخدمات لمجتمع مغلق محدد، ونحن نعتزم تضمين Discourse كمنصة اجتماعية. أتساءل ما هي أفضل وأنيق طريقة (من الناحية التقنية) لدمج مثيل Discourse بسلاسة مع مجموعتنا.
ولتوضيح ذلك، تتضمن مجموعتنا الخدمة A والخدمة B (التي قمنا ببنائها داخليًا) بالإضافة إلى خدمة مصادقة موحدة تعتمد على OAuth2.
عندما ينقر المستخدم لتسجيل الدخول في أي من الخدمة A أو B، يتم إعادة توجيهه إلى خدمة المصادقة الموحدة حيث يسجل الدخول ثم يُعاد توجيهه كما هو معتاد. ومع ذلك، بفضل إدارة ملفات تعريف الارتباط (Cookies) والجلسات، فإن تسجيل الدخول إلى الخدمة A لن يتطلب من المستخدم تسجيل الدخول مرة أخرى إلى الخدمة B إذا قرّر زيارتها لاحقًا (حيث سيكون لديه جلسة نشطة بالفعل).
وبالمثل، نرغب في إيجاد طريقة تسمح للمستخدمين بالتنقل بسلاسة إلى خدمة Discourse من أي من الخدمة A أو B بعد تسجيل الدخول عبر خدمة المصادقة الموحدة. نفترض أن بيانات المستخدم موجودة مسبقًا في جميع الخدمات. حاليًا، تم تقييم إضافة OAuth2 لـ Discourse وهي تعمل مع خدمة المصادقة الموحدة الخاصة بنا، لكنها تتطلب من المستخدمين النقر على “تسجيل الدخول باستخدام المصادقة الموحدة” مرة أخرى عند زيارة Discourse. هل توجد طريقة، مثل استدعاء API، لبدء جلسة تلقائيًا مع Discourse أيضًا عندما يسجل المستخدم الدخول عبر خدمة المصادقة الموحدة المشتركة من الخدمة A أو B؟
علاوة على ذلك، تمتد هذه المسألة أيضًا إلى دمج التعليقات عبر المكون المضمن. لا يشكل تشغيل خدمة Discourse “عامة” أي مشكلة مع قسم التعليقات، حيث تُعرض التعليقات بشكل صحيح. لكن عند تشغيل خدمة Discourse خاصة، لن تظهر نافذة التعليقات المضمنة بشكل صحيح إذا لم يكن المستخدم قد سجل الدخول إلى Discourse مسبقًا، وهو ما يمثل مشكلة عندما نتحدث عن التكامل السلس.
هل توجد طريقة للتغلب على هذه المشكلات؟ كنت أفكر في بناء إضافة وسيطة (middleware plugin) تقوم بفك تشفير رمز أو ملف تعريف ارتباط (cookie) ومصادقة وتسجيل الدخول للمستخدم المناسب فورًا قبل إجراء المكالمة الفعلية. هل توجد إضافة موجودة مسبقًا للقيام بذلك؟
شكرًا لك على الرد السريع. ومع ذلك، فإن هذا لا يحل المشكلة. سواء في نافذة تعليقات Discourse المدمجة أو عند الانتقال إلى موقع Discourse، سيحتاج المستخدم (الذي سبق له تسجيل الدخول إلى “الخدمة أ” مثلاً عبر SSO) إلى تسجيل الدخول مرة أخرى.
في الحالتين، تظهر لي رسالة ترحيبية تقول: “مرحبًا، مطلوب حساب. يرجى طلب دعوة من عضو موجود أو تسجيل الدخول للمتابعة.” مع زر تسجيل الدخول. عند النقر عليه، تظهر نافذة تسجيل الدخول ويُطلب مني الدخول إما عبر اسم المستخدم وكلمة المرور أو عبر SSO الخاص بـ OAuth. لا يُطلب مني إدخال اسم المستخدم وكلمة مرور SSO مرة أخرى لأن جلسة SSO لا تزال نشطة، لكنني لا أريد أن يمر المستخدمون بتجربة مماثلة. عندما يسجل المستخدم الدخول إلى “الخدمة أ”، يجب أن يتم تسجيله تلقائيًا في Discourse أيضًا دون الحاجة إلى الضغط على زر “تسجيل الدخول” مرة أخرى.
ما الذي نحتاجه لتحقيق ذلك؟
أنا أستخدم إصدار Discourse 2.5.2 إذا كان ذلك ذا صلة.
في أحدث إصدار من Discourse، بشرط تمكين كل من “تسجيل الدخول مطلوب” و"المصادقة فورًا"، سيتم تسجيل دخول المستخدم تلقائيًا إلى Discourse طالما أن لديه ملف تعريف ارتباط صالح في مزود الهوية.
حسناً، أنا أستخدم صور Bitnami، ولا يزال أحدث إصدار منها 2.5.2، لذا سأحتاج على الأرجح إلى الانتظار قليلاً (أو إيجاد طريقة للتحديث يدوياً، أو استخدام صورة أخرى).
على أي حال، شكراً جزيلاً لتوجيهي إلى الاتجاه الصحيح. هذا مُقدَّر جداً!
تذكّر أن صور bitnami غير مدعومة من مطوري Discourse، وقد واجهت على مر السنين العديد من مشاكل التوافق مع الاستخدام العادي للبرنامج. أنصح بشدة باستخدام التثبيت القياسي الرسمي لـ Discourse