مشکل CORS policy با apiها در جنگو
اگر شما هم با یکی از فریمورکهای فرانت یا برنامههای دیگر در حال خواندن داده و ارتباط با api هستید که این api را با جنگو نوشتهاید و با خطای CORS policy روبه رو میشوید این نوشته را تا پایان بررسی کنید.
مشکل CORS policy با apiها در جنگو
اگر شما هم خطای زیر را مشاهده کردهاید پس به نوشتهی درستی برای رفع مشکل خود آمدهاید:
Access to fetch at ‘http://127.0.0.1:8000/api/v1/config/list/’ from origin ‘http://localhost:3000’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.
برای رفع این مشکل ابتدا پکیج django-cors-headers را باید نصب کنید. برای نصب django-cors-headers در جنگو از دستور زیر استفاده کنید:
pip install django-cors-headers
سپس وارد فایل settings.py پروژه شوید و در این فایل تغییرات زیر را ایجاد کنید:
- به بخش INSTALLED_APPS بروید و مقدار corsheaders را نیز درون آن قرار دهید.
- سپس به MIDDLEWAREها مقدار corsheaders.middleware.CorsMiddleware را نیز اضافه کنید.
- سپس کد زیر را نیز به این فایل اضافه کنید:
ALLOWED_HOSTS=['*'] CORS_ORIGIN_ALLOW_ALL = True
حالا مشکل شما حل خواهد شد. اگر هنوز مشکل بالا باقی ماند سرور خود را یک بار مجدد اجرا کنید و سپس به کار خود ادامه دهید.
اگر مشکل شما با روش بالا حل نشد در بخش نظرات همین نوشته برای ما بنویسید.



















وقتی از JWT یا session استفاده میکنیم هم این مشکل وجود داره؟
بله، مشکل CORS policy در صورت استفاده از JWT یا session نیز ممکن است رخ دهد و راه حل ارائه شده در پست برای این موارد نیز کاربردی است.
آیا نصب فقط پکیج کافی هست یا نسخه خاصی از django-cors-headers باید باشه؟
نصب خود پکیج معمولاً کافی است و نیازی به نسخه خاصی نیست. اگر همچنان مشکل داشتید، لطفاً جزئیات بیشتری ارائه دهید.
آیا این مشکل فقط تو لوکال پیش میاد یا روی هاست واقعی هم رخ میده؟
این مشکل هم در محیط لوکال و هم روی هاست واقعی میتواند رخ دهد و راه حل ارائه شده برای هر دو محیط کاربردی است
برای پروژههای بزرگ، بهتر نیست فقط دامینهای خاص رو اجازه بدیم؟
بله کاملاً درست میفرمایید. برای پروژههای بزرگ و امنتر، توصیه میشود به جای CORS_ORIGIN_ALLOW_ALL = True، لیست دامینهای مجاز را در CORS_ALLOWED_ORIGINS مشخص کنید.
آیا استفاده از CORS_ORIGIN_ALLOW_ALL = True تو محیط production امن هست؟
استفاده از CORS_ORIGIN_ALLOW_ALL = True در محیط production توصیه نمیشود و بهتر است فقط به دامنههای مورد نیاز اجازه دسترسی دهید.