إعداد سياسة CORS مع React

أرغب في الوصول إلى واجهة برمجة تطبيقات Discourse باستخدام React.

أحصل على الخطأ التالي:

localhost/:1 تم حظر الوصول إلى XMLHttpRequest إلى 'https://community.oppkey.host/posts.json' من المصدر 'http://localhost:3000' بسبب سياسة CORS: لا توجد رأسية 'Access-Control-Allow-Origin' في المورد المطلوب.

هذه هي إعدادات أصل CORS الخاصة بي باستخدام لوحة إدارة Discourse.

على خادم Discourse، لدي ما يلي في /var/discourse/containers/app.yml

هذا هو الطريقة التي أحاول بها الحصول على واجهة برمجة تطبيقات Discourse.

export const DiscoursePanel = () => {
    const [ allData, updateData ] = useState([]);
	
	useEffect(() => {
         const apiEndPoint = 'https://community.oppkey.host/posts.json';
         /* const apiEndPoint = 'https://jsonplaceholder.typicode.com/posts'; */
        console.log("trying to get API on " + apiEndPoint);
		axios
        .get(apiEndPoint)
		.then((res) => {
			const currentData = res.data;
            updateData(currentData);
            console.log("got api");
            console.log(currentData);
		})
		.catch((err) => console.log(err));
    }, []);

إذا استخدمت خادمًا خارجيًا يحتوي على بيانات وهمية، فإن كود React يعمل.

لا أفهم كيفية عمل CORS و React بشكل عام، لذا فإن أي مساعدة ستكون موضع تقدير.

لدي أشياء تعمل مع خادم وكيل API قمت بكتابته لتحويل مكالمات API من خادم Discourse الخاص بي إلى خادم REST API آخر أستخدمه للاتصال بـ React. على الرغم من أن هذا يعمل، إلا أنه بطيء. أرغب في إرسال مكالمات API مباشرة من React إلى نقاط نهاية واجهة برمجة تطبيقات Discourse.

image

مرحباً @codetricity

عذرًا لم تجد ردًا على هذا المنشور. أنا أستخدم React fetch وقد مررت بخطوات مماثلة لتلك التي ذكرتها أعلاه ولكنها لا تزال محظورة “بسبب سياسة CORS”.

هل وجدت حلاً لهذه المشكلة أو موردًا يشرح الحل؟ شكرًا!

مرحباً، لا أستطيع تذكر ما فعلته في النهاية. على الرغم من ذلك، لقد تحققت للتو ولا يزال موقع React يعمل ويجلب البيانات من Discourse (على خادم منفصل).

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

مرحباً
شكراً على الرد السريع! :slight_smile:

إذا كان لديك دقيقة ووقت للوصول إلى نفس الكود، هل يمكنك التحقق مما إذا تمت إضافة رؤوس إضافية؟ (بدون المعلومات الحساسة نفسها…)

يقول أعلاه “لا يوجد رأس ‘Access-Control-Allow-Origin’” لذلك أعتقد أنه كان يجب إضافة رؤوس إضافية؟

شكراً مقدماً! :smiley: