403 Forbidden."CSRF token missing or incorrect"響應的處理解決方法

Django項目中的settings.py裏面的django.middleware.csrf.CsrfViewMiddleware中間件,使得Django默認帶有csrf驗證
通過中間件在cookie中設置了csrf_token,實際上是在session中存儲了未加密的csrf_token,並且將生成的sessionID編號存儲在cookie中


確定settings.py文件中是否存在django.middleware.csrf.CsrfViewMiddleware

在這裏插入圖片描述


ajax發送請求

在js裏面,獲取到cookie中的csrf_token,將其添加到ajax的請求頭中

// 正則匹配cookie中的csrftoken,傳入cookie名字
function getCookie(name) {
    var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
    return r ? r[1] : undefined;
}
    $.ajax({
	...
	headers: {
	    "X-CSRFToken": getCookie("csrftoken") 
	},
	....

在這裏插入圖片描述


表單提交

在form表單中添加{% csrf_token %}

<form action="/" method="post">
    {% csrf_token %}
    ...

驗證過程:

  1. 獲取請求頭 / (表單)中的csrf_token(加密的),然後使用secret_key解密,得到解密後csrf_token。

  2. 通過cookie中的sessionID,取到服務器內部存儲的session中的csrf_token(未加密的)。

  3. 將兩者的值進行比較

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章