Amer Abdallah نشر 18 سبتمبر 2021 أرسل تقرير نشر 18 سبتمبر 2021 أحاول أن أقوم بإرسال طلب من نوع post من خلال Ajax في jQuery، لكن كل الطلبات تعيد نفس الخطأ وهو: [18/Sep/2021 21:58:29] "POST /comments/ HTTP/1.1" 403 2332 أنا متأكد من أنني هناك شيئًا ما مفقود، لكنني لا أعرف ما هو، لأنني متأكد من أن الطلبات التي أرسلها إلى الخادم صحيحة. كيف أحل هذا الخطأ؟ 2 اقتباس
1 سامح أشرف نشر 18 سبتمبر 2021 أرسل تقرير نشر 18 سبتمبر 2021 يحدث هذا الأمر لأنك لا ترسل رمز CSRF Token مع الطلب، وبالتالي لا يتعرف جانغو Django على مُرسل الطلب، وهذا الأمر لحماية الموقع من بعض الهجمات الإحتيالية التي قد تؤدي إلى إرسال طلبات عشوائية من مواقع مختلفة على أساس أنها مستخدمين، أو حتى سرقة بيانات المستخدمين وكلمات المرور والبطاقات البنكية .. إلخ. ولحل المشكلة كل ما عليك فعله هو إرسال رمز CSRF من خلال الخاصية csrfmiddlewaretoken في بيانات الطلب data، على النحو التالي: $.ajax({ data: { somedata: 'somedata', csrfmiddlewaretoken: '{{ csrf_token }}' }, إن لم يكن كود JavaScript يتم توليد في ملف عرض view (أي إن كنت تستخدم CDN أو حتى تخزن ملفات JS منفصلة)، فيمكنك أن تقوم بإضافة رمز CSRF إلى الصفحة في شكل حقل مخفي أو حتى كود JavaScript منفصل، ومن خلال JavaScript يتم إحضار هذا الرمز وإدراجه في الطلب، كالتالي: <!-- حقل إدخال مخفي --> <input type='hidden' name='csrfmiddlewaretoken' value='{{ csrf_token }}' /> <!-- أو من خلال كود جافاسكريبت منفصل --> <script type="text/javascript"> window.CSRF_TOKEN = "{{ csrf_token }}"; </script> بعد ذلك من خلال جافاسكريبت تستطيع إحضار هذه القيمة وإستخدامها في الطلب. 1 اقتباس
0 Ali Haidar Ahmad نشر 18 سبتمبر 2021 أرسل تقرير نشر 18 سبتمبر 2021 (معدل) تجدر الإشارة أيضاً إلى أنه لم تكن هناك أخطاء في طلبات AJAX POST في Django 1.2.4 وماقبلها (لم تكن AJAX محمية بأي شكل من الأشكال، لكنها كانت تعمل بشكل جيد). لحل المشكلة استخدام معالج ajaxSetup بدلاً من معالج ajaxSend: $.ajaxSetup({ beforeSend: function(xhr, settings) { function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // هل تبدأ سلسلة ملفات تعريف الارتباط هذه بالاسم الذي نريده؟ if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { //ذات الصلة، أي محليًا URL فقط إلى عناوين Token أرسل ال xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); } } }); قم باستخدام هذا الكود كما هو وستكون قادر على النشر بدون خطأ 403. تم التعديل في 18 سبتمبر 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
السؤال
Amer Abdallah
أحاول أن أقوم بإرسال طلب من نوع post من خلال Ajax في jQuery، لكن كل الطلبات تعيد نفس الخطأ وهو:
[18/Sep/2021 21:58:29] "POST /comments/ HTTP/1.1" 403 2332
أنا متأكد من أنني هناك شيئًا ما مفقود، لكنني لا أعرف ما هو، لأنني متأكد من أن الطلبات التي أرسلها إلى الخادم صحيحة.
كيف أحل هذا الخطأ؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.