根據 csrf_token 校驗原理,具體操作步驟有以下幾步: 1.后端生成 csrf_token 的值,在前端請求登錄或者注冊界面的時候將值傳給前端,傳給前端的方式可能有以下兩種: 在模板中的 From 表單中添加隱藏字段 將 csrf_token 使用 cookie 的方式傳給前端 2.在前端發起請求時,在表單或者在請求頭中帶上指定的 csrf_token 3.后端在接受到請求之后,取到前端發送過來的 csrf_token,與第1步生成的 csrf_token 的值進行校驗 4.如果校驗對 csrf_token 一致,則代表是正常的請求,否則可能是偽造請求,不予通過 而在 Flask 中,CSRFProtect 這個類專門只對指定 app 進行 csrf_token 校驗操作,所以開發者需要做以下幾件事情: 生成 csrf_token 的值 將 csrf_token 的值傳給前端瀏覽器 在前端請求時帶上 csrf_token 值 生成 csrf_token 的值 # 導入生成 csrf_token 值的函數 from flask_wtf.csrf import generate_csrf # 調用函數生成 csrf_token csrf_token = generate_csrf() 將 csrf_token 的值傳給前端瀏覽器 實現思路:可以在請求勾子函數中完成此邏輯 @app.after_request def after_request(response): # 調用函數生成 csrf_token csrf_token = generate_csrf() # 通過 cookie 將值傳給前端 response.set_cookie("csrf_token", csrf_token) return response 在前端請求時帶上 csrf_token 值 根據登錄和注冊的業務邏輯,當前采用的是 ajax 請求 所以在提交登錄或者注冊請求時,需要在請求頭中添加 X-CSRFToken 的鍵值對 $.ajax({ url:"/passport/register", type: "post", headers: { **"X-CSRFToken": getCookie("csrf_token")** }, data: JSON.stringify(params), contentType: "application/json", success: function (resp) { if (resp.errno == "0"){ // 刷新當前界面 location.reload() }else { $("#register-password-err").html(resp.errmsg) $("#register-password-err").show() } } })
https://blog.csdn.net/brook_/article/details/80954472