首頁 >後端開發 >Python教學 >為什麼我的 AJAX POST 請求因 Django CSRF 檢查而失敗?

為什麼我的 AJAX POST 請求因 Django CSRF 檢查而失敗?

DDD
DDD原創
2024-12-08 05:38:09159瀏覽

Why Do My AJAX POST Requests Fail with a Django CSRF Check?

Django CSRF 檢查Ajax POST 請求失敗

介紹:

介紹:

內建的-in 機制來防止跨站點請求偽造(CSRF) 攻擊。然而,這種保護有時會幹擾 AJAX POST 請求。本文將解釋該問題並提供解決方案。

問題:

由於 Django 的 CSRF,對 Django 視圖的 AJAX POST 請求可能會失敗,並出現 403 Forbidden 錯誤保護。當請求中的 CSRF 令牌與 Django 產生的 CSRF 令牌不符時,就會發生錯誤。

原因:

Ajax 請求(使用 JavaScript)可能不會自動發送請求頭中存在CSRF token,導致CSRF檢查失敗Django。

$.ajax({
    data: {
        somedata: 'somedata',
        moredata: 'moredata',
        csrfmiddlewaretoken: '{{ csrf_token }}'
    },
    ...  // other Ajax options
});
解決方案:

要解決此問題,請手動將 CSRF 令牌新增至 Ajax 請求的資料正文中。這可以使用帶有data 屬性的$.ajax 函數來完成:

驗證:

要驗證令牌是否正確,您可以檢查發出Ajax請求之前csrfmiddlewaretoken cookie 的值。此 cookie 包含 csrf 令牌。

替代方案:如原始問題所述,使用 csrf_exempt 裝飾器停用視圖的 CSRF 檢查並不是理想的方法。建議確保遵守CSRF保護機制。

以上是為什麼我的 AJAX POST 請求因 Django CSRF 檢查而失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn