ووردبريس متعدد المواقع مع عدة نسخ من ديسكورد

مرحبًا بالجميع،

أبحث عن معلومات / دراسة جدوى لإضافة مجتمع ديسكورد آخر إلى إعدادنا الحالي. حاليًا، لدينا إعداد ووردبريس متعدد المواقع (Multisite) مع مجتمع ديسكورد واحد يستخدم SSO الخاص بديسكورد لموقع مخصص لمجتمع ديسكورد، بينما يتم تشغيل تسجيل الدخول إلى ووردبريس عبر مزود SSO آخر.

أود إضافة موقع ووردبريس جديد لمجتمع ديسكورد جديد، لكنني غير واضح بشأن ما إذا كان يمكن دمج منتديات ديسكورد متعددة داخل إعداد متعدد المواقع هذا (إذا كان ذلك منطقيًا). نظرًا لأن SSO هو إعداد شبكة ووردبريس، يبدو أنه لا يمكن وجود أكثر من مثيل واحد لديسكورد.

المثالي أن يكون لدينا:

  • ووردبريس متعدد المواقع
  • مثيلان لديسكورد

(يجب أن يكون لدى المستخدمين بين مثيلي ديسكورد الوصول فقط إلى المجتمع الذي ينتمون إليه).

لقد قرأت بعض المنشورات حول إعداد ووردبريس متعدد المواقع مع ديسكورد بموقع واحد (والعكس)، لكنني لم أجد أي معلومات حول ووردبريس متعدد المواقع مع مثيلات ديسكورد متعددة.

شكرًا لكم

لا يمكن أن تعمل المواقع في إعداد شبكة مواقع ووردبريس كمزود لتسجيل الدخول الموحد (SSO) لنسختين من منصة ديسكورد. والسبب في ذلك هو أنه في شبكة المواقع، يتم تخزين جميع المستخدمين في جدول قاعدة بيانات واحد. وإذا سُمح لنسختين من منصة ديسكورد بالعمل كمزودين لتسجيل الدخول الموحد لمواقع متعددة في الشبكة، فلا توجد طريقة مباشرة لضمان أن معرفات المستخدمين المحفوظة في ووردبريس فريدة من نوعها.

شكرًا لك - هذا ما كنت أتوقعه. هل من الممكن السماح لم instance واحد من Discourse بأن يكون مزوّد SSO للم instance الآخر، مع الحفاظ على وصول المستخدمين الصحيح إلى مجتمعاتهم المعنية؟

يمكن لنسخة من Discourse أن تعمل كمزوّد SSO لنسخة أخرى من Discourse. أفترض أن الإعداد الذي تفكر فيه هو استخدام WordPress كمزوّد SSO لنسخة Discourse الأولى، وأن نسخة Discourse الأولى تكون هي مزوّد SSO لنسخة Discourse الثانية. أعتقد أن هذا ممكن، لكنني لم أقوم مطلقًا بتكوين موقع Discourse ليكون في آن واحد عميل SSO ومزوّد SSO.

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

من الممكن اتباع نهج آخر لحل المشكلة وهو استخدام نسخة واحدة من Discourse واستخدام أذونات مجموعات الفئات لتقييد الأجزاء التي يمكن للمستخدمين الوصول إليها في المنتدى. يمكنك تمرير مجموعات Discourse في حمولة SSO. يجب أن يكون من الممكن على موقع WordPress الخاص بك تحديد المواقع التي يمكن للمستخدم الوصول إليها. يمكنك إنشاء مجموعة Discourse لكل موقع WordPress، ثم استخدام مرشح wpdc_sso_params لإضافة معامل add_groups إلى حمولة SSO.

حاليًا، مزود تسجيل الدخول الموحد هو ديسكورش نفسه — وأظن أن الاعتبار (الجديد) سيكون جعل الحالة الأولى هي مزود تسجيل الدخول الموحد (لكل من الحالتين الأولى والثانية).

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

مرحبًا @simon - أقوم حاليًا بتطبيق هذا ولا أعرف سبب عدم ظهور خيارات عميل SSO في إضافة WP Discourse. انظر إلى لقطة الشاشة أدناه

تُظهر حالة الاتصال أنها نشطة (يُظهر آخر استخدام لمفتاح API ذلك أيضًا). عند إضافة الاختصار [discourse_sso_client]، يبدو أن هناك مشكلة في التكوين (تحتوي رأس استجابة الموقع على URL المُولَّد بواسطة الاختصار [discourse_sso_client] بدلاً من حمولة SSO).

هذا التصميم مقصود. تتوفر خيارات عميل SSO فقط في شبكات المواقع المتعددة عند تكوينها على مستوى الموقع بأكمله. أحتاج إلى إعداد شبكة مواقع متعددة في بيئة التطوير المحلية الخاصة بي للتحقق مرة أخرى من الإعدادات. سأعود إليك بشأن هذا الأمر لاحقًا اليوم.

شكرًا - حاليًا قمت بتثبيت الإضافة على مستوى الشبكة مع اختيار عميل SSO

تعديل: قمت بتتبع المشكلة إلى ملف query-redirect.php هنا:

if ( empty( $this->options['sso-client-enabled'] ) || 1 !== intval( $this->options['sso-client-enabled'] ) ) {
   return;
}

يبدو أن هذا الخيار لم يتم تعيينه بشكل صحيح بالنسبة لي - لست متأكدًا مما إذا كان ذلك بسبب الإعداد على مستوى الشبكة أو غير ذلك.

توثيق إعداد الإضافة في شبكة متعددة المواقع غير محدث. هذه فرصة جيدة لتنظيمه وتحديث دليل تثبيت وإعداد إضافة WP Discourse.

لاستخدام وظيفة عميل SSO في شبكة متعددة المواقع، يجب تهيئة الإضافة على مستوى الشبكة. يتم ذلك بالنقر على رابط Discourse في لوحة تحكم الشبكة:

في صفحة Discourse الخاصة بالشبكة، حدد خيار تمكين تكوين متعدد المواقع. ثم أدخل عنوان URL الخاص بـ Discourse ومفتاح API واسم المستخدم للنشر في قسم إعدادات الاتصال. انتقل إلى أسفل الصفحة واضغط على زر حفظ الخيارات. يجب أن تظهر رسالة “أنت متصل بـ Discourse!” في أعلى الصفحة.

لاستخدام Discourse كمزود SSO للمواقع في شبكتك متعددة المواقع، انتقل إلى أسفل صفحة Discourse الخاصة بالشبكة وحدد خيار تمكين عميل SSO. أضف أيضًا مفتاحًا إلى إعداد مفتاح سر SSO. احفظ خياراتك مرة أخرى.

الآن انتقل إلى موقع Discourse وانسخ المفتاح السري إلى إعداد موقع sso provider secrets في Discourse. أدخل رمز * كمجال مزود SSO. عند حفظ هذا الإعداد، يجب أن يبدو مشابهًا لهذا:

الآن حدد خيار enable sso provider في Discourse.

مع وجود هذه الإعدادات، عند الانتقال إلى تبويب WP Discourse SSO / SSO Client لأي موقع في شبكتك، يجب أن تأخذك إلى صفحة تبدو مشابهة لهذا:

لإجراء اختبار سريع، حدد خيارات إضافة رابط تسجيل الدخول ومزامنة المستخدمين الحاليين عبر البريد الإلكتروني. ثم قم بتسجيل الخروج من موقع WordPress الخاص بك. يجب أن تتمكن من تسجيل الدخول مرة أخرى بالنقر على رابط “تسجيل الدخول باستخدام Discourse” الذي سيظهر على صفحة wp-login.php الخاصة بك.

إذا لم تكن تستخدم صفحة تسجيل الدخول الافتراضية في WordPress، فحاول نسخ الاختصار [discourse_sso_client] إلى منشور في موقعك. يعرض هذا الاختصار فقط تعليمات تنسيق الصفحة للمستخدمين غير المسجلين. يمكنك أيضًا إنشاء رابط تسجيل الدخول عن طريق بناء رابط بهذا الشكل:

<a href="https://example.com/?discourse_sso=1&redirect_to=https://example.comt/">تسجيل الدخول باستخدام Discourse</a>

سيؤدي هذا إلى تسجيل دخول المستخدم إلى موقعك باستخدام Discourse ثم إعادة توجيهه إلى صفحة WordPress التي قمت بتعيينها كقيمة لمعلمة redirect_to.

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

الكود الذي وجدته والذي كان يمنع عميل SSO من العمل بالنسبة لك صحيح، ولكنه شرط مكتوب بشكل سيء:

if ( empty( $this->options['sso-client-enabled'] ) || 1 !== intval( $this->options['sso-client-enabled'] ) )

يجب تبسيطه إلى if ( empty( $this->options['sso-client-enabled'] ) ). هذا هو النمط المستخدم في كل مكان آخر في الإضافة.