عند إعداد المصادقة الموحدة (SSO) مع ووردبريس في البداية، كان المستخدمون ينتقلون إلى رابط المنتدى، ثم يتم إعادة توجيههم إلى صفحة تسجيل الدخول في ووردبريس، وبعد تسجيل الدخول يتم إعادة توجيههم مرة أخرى إلى المنتدى.
لكن في مرحلة ما، تغير هذا السلوك ولا أعرف كيف. الآن، بعد تسجيل الدخول في ووردبريس، يتم إعادة توجيه المستخدم إلى لوحة تحكم ووردبريس.
أيضًا، الأمر الغريب الآخر هو أنه عند تسجيل الخروج من ديسكورد، أرى رسالة “تم تسجيل خروجك”، ولكن عند النقر على زر “تحديث”، لا يتم تسجيل الخروج فعليًا. ولا يزال بإمكاني النشر والرد وما إلى ذلك. أحيانًا أضطر إلى تسجيل الخروج مرتين أو ثلاث مرات حتى يتم تسجيلي فعليًا. إذن الأمر يعمل، لكن ليس بشكل متسق.
هل لديكم أي أفكار حول كيفية استكشاف هذه المشكلة وحلها؟
من المحتمل أن يكون هناك مكون إضافي لـ WordPress يتعارض مع مساراتك و/أو يتصل بوظائف تسجيل الدخول لديك. ما عليك سوى تعطيل نصف المكونات الإضافية لـ WordPress ومعرفة أي النصف يسبب المشكلة، ثم قم بتعطيل نصف المكونات الإضافية في تلك المجموعة وهكذا.
ابدأ بالمكونات الإضافية المتعلقة بالمصادقة والعضويات وتسجيل الدخول.
راجع إعدادات الإضافة للتحقق من أي تحويلات تسجيل دخول تنشئها. يبدو أنها تحوّل المستخدمين إلى صفحة ملفهم الشخصي قبل أن تتمكن إضافة WP Discourse من إعادة توجيههم إلى Discourse. إذا وجدت الحل، يرجى نشره هنا. وإذا لم تجد الحل، فأخبرنا بذلك. يمكنني محاولة تثبيت MemberPress على موقعي المحلي.
نعم، تعد إضافة Health Check رائعة لاستكشاف هذا النوع من المشكلات وتصحيحها.
لم أستطع التوصل إلى أي حل مع MemberPress لهذه المشكلة. بالتأكيد هناك تعارض مع MemberPress، لأنها الإضافة الوحيدة التي قمت فيها بتعيين عنوان إعادة توجيه محدد، أي /jump.
لا أعرف حقًا ما الخطوة التالية. عندما يسجل شخص ما الدخول من موقع WordPress الخاص بي، أريد إعادة توجيه هؤلاء الأشخاص إلى /jump بعد تسجيل الدخول. إذن، MemberPress تقوم بعملها بشكل صحيح في هذا الجانب.
لكن عندما يصل الأشخاص إلى موقع discourse الخاص بي، مثل community.mydomain.com، يتم إعادة توجيههم إلى صفحة تسجيل الدخول في WordPress، وبعد تسجيل الدخول، يتم إرسالهم أيضًا إلى /jump بدلاً من العودة إلى المنتدى.
هل تعرف الإعدادات التي قمت بتفعيلها في MemberPress لإنشاء إعادة التوجيه؟ لدي إصدار حديث من MemberPress مثبتًا على موقع التطوير الخاص بي، لكنني لم أستطع إعادة إنتاج مشكلة تسجيل الدخول، ولا مشكلة عدم تسجيل خروج المستخدمين من Discourse.
هل موقع WordPress الخاص بك يعمل على تثبيت متعدد المواقع (multisite)، أم أنه تثبيت عادي لـ WordPress؟
من الممكن أن المشكلة التي تواجهها فيما يتعلق بعدم تسجيل خروج المستخدمين من Discourse تعود إلى أن موقع Discourse مُعدّ لطلب تسجيل الدخول لعرض المحتوى. في هذه الحالة، عند تحديث صفحة Discourse، سيتم بدء عملية تسجيل الدخول عبر SSO. لتسجيل خروج المستخدمين بالكامل من Discourse، يجب أيضًا تسجيل خروجهم من WordPress. ويمكن تحقيق ذلك عن طريق إدخال https://example.com/?request=logout في إعداد موقع Discourse المسمى logout redirect. استبدل example.com بنطاق موقع WordPress الخاص بك. أخبرني إذا قمت بذلك ولا تزال المشكلة قائمة.
إنه تثبيت ووردبريس عادي (ليس موقعًا متعدد المواقع). وتم إصلاح تسجيل الخروج.
المشكلة تتعلق بإعادة التوجيه بعد تسجيل الدخول، أي أن المستخدمين لا يتم إعادة توجيههم مرة أخرى إلى موقع ديسكورس بعد تسجيل الدخول في ووردبريس. بدلاً من ذلك، يبدو أن MemberPress يقوم بإرسالهم إلى صفحة افتراضية في ووردبريس.
هل تعلم ما إذا كنت قد قمت بتعيين الصفحة التي يتم إعادة توجيه المستخدمين إليها في خيارات MemberPress؟ إذا كان الأمر كذلك، فما هو الخيار الذي قمت بتعيينه لهذا الغرض؟
المشكلة تحدث في الدالة track_and_override_login_redirect_mepr. هذه الدالة مربوطة بفلتر MemberPress mepr-process-login-redirect-url. قد يكون من الممكن الربط بهذه الدالة وتجاوزها عن طريق التحقق من استعلام الاستعلام الذي تم تعيينه. يمكن القيام بذلك باستخدام الدالة wp_get_referer().
لا أعتقد أن لدي وقتًا لحل هذه المشكلة اليوم، لكنني سأراجعها مرة أخرى خلال الأيام القليلة القادمة.
أعدت النظر في هذا الأمر بينما لا يزال حديثاً في ذهني. إضافة الدالة التالية إلى ملف functions.php الخاص بالقالب حل المشكلة بالنسبة لي، لكن لم يتم اختبار هذا الحل بشكل كافٍ.
تقوم هذه الدالة بالالتصاق بفلتر 'mepr-process-login-redirect-url' قبل أن يلتصق به MemberPress. ثم تتحقق من قيمة معلمات الاستعلام لمعرفة ما إذا كان الطلب قد بدأ بواسطة طلب SSO من Discourse. إذا كان الأمر كذلك، فإنها تعيد توجيه المستخدم إلى الصفحة الرئيسية لـ WordPress مع الحفاظ على معلمات الاستعلام كما هي. هذا سيسبب في إكمال إضافة WP Discourse لطلب SSO. أعتقد أن هذا قد يعمل حتى لو كانت الصفحة الرئيسية محمية بواسطة MemberPress، ولكن من الجيد التأكد من ذلك.
إذا لم يكن الطلب قد بدأ بواسطة Discourse، فإن الدالة الثابتة MeprProductsCtrl::track_and_override_login_redirect_mepr تُستدعى بالوسائط التي تم تمريرها إلى الفلتر.
أتردد قليلاً في التوصية بإضافة هذا الكود إلى موقعك الإنتاجي. إذا قررت تجربته، فتأكد من قدرتك على إزالة الكود من خادمك في حال تسبب في تعطل موقعك. تأكد من اختباره مع أكبر عدد ممكن من مستويات المستخدمين/العضويات.