لقد قمت بإعداد Discourse Connect SSO باستخدام المكون الإضافي الرسمي، لذا يقوم مستخدمو WP بتسجيل الدخول إلى Discourse دون تسجيل مستخدم آخر هناك. كل شيء يعمل بشكل جيد، باستثناء أن كل طلب لوحة تحكم WP (منطقة المسؤول) يتم إبطاؤه بمقدار 10 ثوانٍ بسبب انتهاء مهلة اكتشفتها فقط عبر مكون Query Monitor الإضافي.
https://{our-forum-address}/site.json cURL error 28: Connection timeout after 10001 ms
حتى لو نجح الأمر، فلماذا هناك حاجة لطلب كهذا في المقام الأول؟ كيف يمكنني تعطيله؟
المنتدى والموقع على خادمين منفصلين. لا يوجد Cloudflare. SSL هو letsencrypt. لم تكن هناك مشكلة في بيئة الاختبار. انتقلت إلى الموقع المباشر، وأنشأت مفتاح API وسر جديدين، وحاولت حل هذه المشكلة ولكن لم ينجح الأمر.
يقول المكون الإضافي أنت غير متصل بـ Discourse. تحقق من صحة إعدادات الاتصال الخاصة بك. إذا استمرت المشكلة، فقم بتمكين سجلات الاتصال وتحقق من السجلات. … لكنني متصل، حيث يمكن للمستخدمين تسجيل الدخول بسلاسة إلى المنتدى بمجرد النقر على رابط يحتوي على عنوانه.
تقول السجلات في WP:
[2024-10-31 10:54:47] connection.INFO: check_connection_status.failed_to_connect {"error":"wpdc_response_error","message":"An invalid response was returned from Discourse","http_code":"","http_body":""}
اعتقدت أن هذا الشيء الأمني الغريب في ووردبريس يعطله، لذا أضفت هذا ولكن لم ينجح الأمر أيضًا:
add_filter('http_request_host_is_external', [$this, 'mark_discourse_api_url_external'], 10, 3);
function mark_discourse_api_url_external($is_external, $host, $url)
{
if ($host === "{our-forum-address}") {
return true; // Allow the request by indicating the host IS external
}
return $is_external;
}
لا أعتقد أن المشكلة في المفتاح. لقد جربت بمفتاح الموقع التجريبي مسبقًا، والمفتاح الجديد يقول “لم يُستخدم قط”. عندما أجري مكالمة اختبار wp_remote_request إلى الصفحة الرئيسية لمنتدى، فإنها تنتهي مهلتها أيضًا. لقد قمت بإعدادها لـ “كل مستخدم” و “عام”.
نعم، ولكن لماذا في كل وقت وفي كل صفحة إدارية غير ذات صلة؟ مرة واحدة عند الحاجة ستكون كافية. لقد تتبعت من أين تأتي وهي function get_discourse_categories() وهذا مدمج في add_action( 'admin_init', array( $this, 'setup_options' ) ); لا أريد أن يعرف ووردبريس الخاص بي عن الفئات في المنتدى، لا أستخدم أي ميزات نشر/تعليق، أنا فقط بحاجة إلى تسجيل الدخول، والذي يعمل بالفعل.
لقد أجريت أيضًا طلبًا إلى الصفحة الرئيسية للمنتدى باستخدام wp_remote_request() وهذا ينتهي مهلته أيضًا. المواقع العشوائية الأخرى متاحة.
أتفهم أنك تشعر بأن الطلب إلى /site.json غير ضروري، ولكن بدون اتصال ناجح بـ Discourse الخاص بك، لن يعمل مكون WordPress الإضافي بشكل موثوق بالنسبة لك، لذا يجب علينا معرفة سبب عدم عمل ذلك بغض النظر عن ذلك.
هل يمكنك التفكير في أي فرق آخر بين بيئة الاختبار وبيئة الإنتاج الخاصة بك؟
هل يمكنك مشاركة ملفات سجل WP Discourse الوصفية لمثيلات الاختبار والإنتاج الخاصة بك؟
هل يمكنك مشاركة روابط لمثيلات WordPress و Discourse الخاصة بك؟
كان موقع الاختبار الخاص بي نسخة طبق الأصل تم إنشاؤها يدويًا، على الرغم من أنه يعمل في Docker في جهاز افتراضي. الإنتاج لا تتم إدارته من قبلي، وليس لدي أي فكرة عن نوع الاستضافة، لكننا لم نواجه أي مشاكل على الإطلاق وكان سريعًا جدًا قبل ذلك.
حاولت الآن:
خيار sslverify = false في دالة discourse_request
وأنشأت CNAME (اسم مستعار) على Cloudflare على نطاق آخر من نطاقاتي للإشارة إلى مضيف المنتدى من وراء الكواليس (“SSL أفضل” والمضيف مختلف، لاستبعاد نوع من قيود العودة في جدار الحماية لمضيف الموقع المباشر): https://ibkforum.stateofbliss.us ولكنه ينتهي مهلته بنفس الطريقة، بينما تعمل طلبات الاختبار من موقع الاختبار بشكل جيد. يتم إعادة توجيهه إلى الموقع الرئيسي عند عدم تسجيل الدخول.
سجلات الموقع المباشر هي نفسها كما في مشاركتي الأولى:
[2024-10-31 13:12:32] connection.INFO: check_connection_status.failed_to_connect {"error":"wpdc_response_error","message":"An invalid response was returned from Discourse","http_code":"","http_body":""}
هل تقصد بيئة إنتاج ووردبريس (Wordpress) أم بيئة إنتاج ديسكورس (Discourse)؟ هل من الممكن أن يكون هناك شيء في بيئة إنتاج ديسكورس الخاصة بك يقوم بإعادة توجيه الطلبات و/أو تغيير (أو إزالة) الرؤوس في الطلبات؟
إذا كان بإمكانك مشاركة هذه الملفات الوصفية لكلا النسختين، فسيكون ذلك مفيدًا. انقر فوق “عرض الوصف” (View Meta) في لوحة تحكم “السجلات” (Logs).
هذه على الأرجح هي المشكلة الأساسية. إذا لم يتمكن ووردبريس الخاص بك من رؤية ديسكورس الخاص بك على الإطلاق، فلن يعمل الاتصال. إذا كان بإمكانك اختبار هذا الاتصال بسهولة، فاستمر في القيام بذلك أثناء إجراء أي تعديلات على طبقة الشبكة في منتداك حتى تحصل على خطأ 403 (أي غير مصرح به).
أعتقد أن هذه مشكلة على مستوى الشبكة، ربما إعادة توجيه أو جدار حماية.
لا يوجد موقع استعراض لـ Discourse، كلا الموقعين يستخدمان نفس موقع Discourse المباشر (نفس معرفات المستخدمين، إلخ). سألت عن هذا في موضوع آخر ويجب أن يكون الأمر جيدًا. طبقة الشبكة للمنتدى بسيطة جدًا، مستضافة على Hetzner، و Docker الرسمي في VPS، والمنتدى بالكاد تم استخدامه أو تخصيصه بخلاف بعض العناصر المرئية. لا أعرف أي إعدادات قد تمنع الوصول إليه. لقد أنشأت تذكرة لدى شركة استضافة ووردبريس لمعرفة ما إذا كان بإمكانهم رؤية سبب فشل الاتصالات حيث أنني قلق أكثر بشأن إعدادهم غير العادي.
ما يثير اهتمامي هو أن مجرد حقيقة أن المنتدى يمكنه الوصول إلى ووردبريس (وليس العكس) هو “كافٍ” لتسجيل دخول موحد ناجح. باستثناء تسجيل خروج المستخدمين من المنتدى.
سجلات (يقوم الموقع المباشر بتنزيل ملف ZIP بحجم 0 بايت).