استخدام MessageBus مع تطبيق واجهة أمامية مخصص لـ Discourse على نطاق مختلف

أردت فقط توثيق ذلك هنا في حال كان شخص آخر يحاول فعل الشيء نفسه ويحتاج إلى بعض التوجيه.

أعمل حاليًا على واجهة أمامية باستخدام React مقترنة بواجهة خلفية Discourse وإضافة مخصصة لتعديل بعض وظائف Discourse. أردت تشغيل MessageBus مع التطبيق الأمامي المخصص، لكنني واجهت مشكلة CORS لأن الواجهة الأمامية تُخدم من مصدر مختلف عن Discourse.

لاحظت أن Discourse يقوم بتعيين رأس Access-Control-Allow-Origin إلى Discourse.base_url_no_prefix لبيئة MessageBus، حيث يُفترض بشكل طبيعي أن يعمل MessageBus مع واجهة Ember الافتراضية الخاصة بـ Discourse.

كما هو موثق في ملف README الخاص بـ MessageBus على GitHub، يمكن إضافة رؤوس إضافية إلى بيئة MessageBus، وهو ما تفعله مبدئية MessageBus الخاصة بـ Discourse، حيث يتم تعيين Access-Control-Allow-Origin إلى Discourse.base_url_no_prefix.

لتخصيص ذلك، أضفت الكود التالي إلى الإضافة الخاصة بي:

  MessageBus.extra_response_headers_lookup do |env|
    env["__mb"][:extra_headers].merge({
      "Access-Control-Allow-Origin" => "http://your-custom-domain.com"
    })
  end

هذه الطريقة لها ميزة عدم تجاوز المنطق الهام الخاص بـ Discourse عند تحديد بيئة MessageBus، والذي يتم إنشاؤه عبر استدعاء setup_message_bus_env في مبدئية Discourse، مع السماح في الوقت نفسه بقيم مخصصة.

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

وبالطبع، إذا كان أي مما ورد أعلاه غير صحيح أو غير دقيق، فيرجى إخباري وسأقوم بالتعديل!

10 إعجابات