لدي عميل لديه موقع WordPress يدير الاشتراكات ومنتدى متصل بـ wp-discourse. كل شيء على ما يرام.
ولكنه الآن يريد إضافة مواقع Discourse إضافية تقوم جميعها بالمصادقة مقابل موقع WordPress الوحيد. حاولت نسخ الإعداد من موقع Discourse الأول إلى الموقع الثاني، لكن WordPress يعيد التوجيه إلى موقع Discourse الأول. ثم فكرت أنه ربما يمكنني جعل موقع Discourse الأول خادم discourse_connect للموقع الثاني، لكن هذا لا يزال لا يعمل (فهو أيضًا يعيد التوجيه إلى موقع Discourse الأول ولا يتم تسجيل دخول الموقع الثاني).
هل هناك أي طريقة لجعل موقع WordPress واحد يوفر المصادقة لمواقع Discourse متعددة؟
إذا كنت تخطط لاستخدام تسجيل الدخول الموحد لأكثر من منصتين، فإن الحل الأكثر صحة هو استخدام keycloak.
هذا النهج جيد لأننا لا نحتاج إلى التفكير في خادم تسجيل دخول موحد وتسجيل دخول أبسط عبر الشبكات الاجتماعية (وليس فقط).
يمكنك إضافة وإزالة أي مواقع دون فقدان المستخدم.
لا تم إعداد إضافة WP Discourse للتعامل مع هذا، ولكن يجب أن يكون ذلك ممكنًا.
سأبدأ بإضافة معلمة URL site إلى إعداد discourse_connect_url في ديسكورس. في ووردبريس، استخدم المعلمة site لتعيين موقع ديسكورس الصحيح لإعادة التوجيه إليه هنا:
من الناحية المثالية، يمكن تحقيق التغييرات المذكورة أعلاه باستخدام خطافات action و filter على ووردبريس. يبدو أن الخطافات ستحتاج إلى إضافتها إلى الكود لذلك.
أفترض أن مواصفات هذا لا تتضمن نشر مشاركات من ووردبريس إلى مواقع ديسكورس متعددة. إذا كان الأمر كذلك، فإن التغييرات المطلوبة ستكون أكثر تعقيدًا بعض الشيء.
سأعلمك إذا فكرت في أي مشاكل أخرى.
تعديل: أحتاج إلى التفكير في كيفية استخدام معرف مستخدم ديسكورس في ووردبريس للتأكد من عدم وجود تعارضات بين مواقع متعددة - قد يكون لدى مستخدم واحد في ووردبريس حسابات في مواقع ووردبريس متعددة. سيكون لديهم معرف مستخدم ديسكورس مختلف على كل موقع.
تعديل: أكبر مشكلة أراها هي إذا تم تمكين إعداد “إنشاء أو مزامنة مستخدمي ديسكورس عند تسجيل الدخول” في مواقع ووردبريس. يقوم بإجراء استدعاء API إلى مسار sync_sso في ديسكورس. ستحتاج إلى طريقة لمعرفة موقع ديسكورس الذي يجب مزامنة المستخدم معه أو إنشائه عليه. ستحتاج أيضًا إلى مفتاح API ديسكورس لكل موقع. يبدو هذا قابلاً للتنفيذ، ولكنه سيضيف بعض التعقيد.
أفترض أن هذا يعني تعديل عضويات مجموعات المستخدم على موقع Discourse معين عند إجراء عملية شراء على موقع WordPress. يبدو هذا قابلاً للتنفيذ، ولكن من الأفضل القيام به عن طريق طلب API إلى المسار sync_sso. يحتوي مكون WordPress Discourse الإضافي على وظائف يمكن استخدامها لهذا الغرض، ولكنه يستخدم عنوان URL الخاص بـ Discourse ومفتاح API المحدد في صفحات خيارات المكون الإضافي: https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L278-L326. ربما يمكن للمكون الإضافي إضافة خطافات تصفية لتلك المعلمات حتى يمكن تعيينها بشكل شرطي.
لا يزال الأمر استكشافيًا لذلك ليس لدي ميزانية محددة. لكن يمكنني تقديم بعض المساعدة من المطورين وربما القليل من التمويل. إذا كان عميلك على استعداد للمساهمة أيضًا ، فربما يمكننا تجميع بعض التمويل معًا.