Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Cek Django CSRF Saya Gagal dengan Permintaan POST Ajax?

Mengapa Cek Django CSRF Saya Gagal dengan Permintaan POST Ajax?

DDD
DDDasal
2024-12-04 13:41:14280semak imbas

Why is My Django CSRF Check Failing with an Ajax POST Request?

Django CSRF Check Failed with Ajax Post Request

Seperti yang digariskan dalam dokumentasi Django, mendayakan perlindungan CSRF membantu menghalang serangan permintaan merentas tapak yang berniat jahat. Dengan mengikut arahan, anda cuba melaksanakan semakan CSRF dengan siaran Ajax tetapi masih menghadapi penolakan.

Untuk menyelesaikan masalah ini, pertimbangkan langkah berikut:

  1. Sahkan Kewujudan Token:
    Pastikan kod JavaScript sedang mengambil token CSRF dan menyimpan dalam pembolehubah yang dipanggil csrftoken. Token ini harus ada sebelum menetapkan pengepala:

    $.post("/memorize/", data, function (result) { ... });
    
    var csrftoken = getCookie('csrftoken');
    xhr.setRequestHeader("X-CSRFToken", csrftoken);
  2. Pastikan Penggunaan Token:
    Selepas mendapatkan token, tetapkan secara eksplisit dalam pengepala untuk permintaan Ajax menggunakan setRequestHeader.
  3. Semak Respons Badan:
    Periksa badan respons daripada Django untuk melihat sama ada ia menyebut secara jelas token CSRF yang hilang atau tidak sah.
  4. Kaedah Alternatif (Menggunakan Badan Data):
    Daripada menetapkan pengepala, anda boleh membenamkan token CSRF dalam badan data permintaan Ajax sebagai berikut:

    $.ajax({
        data: {
            csrfmiddlewaretoken: '{{ csrf_token }}',
            ...  // Other data
        },
    });
  5. Dayakan Penyahpepijatan:
    Hidupkan mod nyahpepijat CSRF Django dengan menambahkan DEBUG = Benar pada tetapan. Ini mungkin memberikan mesej ralat atau pembayang tambahan dalam badan respons.

Setelah langkah ini selesai, serahkan semula permintaan Ajax untuk melihat sama ada semakan CSRF berjaya.

Atas ialah kandungan terperinci Mengapa Cek Django CSRF Saya Gagal dengan Permintaan POST Ajax?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn