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中文網其他相關文章!