django前後端分離csrf驗證的解決方法
阿新 • • 發佈:2019-02-02
django前後端分離csrf的解決方法
第一種方式ensure_csrf_cookie
- 這種方方式使用
ensure_csrf_cookie
裝飾器實現,且前端頁面由瀏覽器傳送檢視請求,在檢視中使用render渲染模板,響應給前端,此時這個渲染模板的檢視函式上要加上這個裝飾器 - 這種方式保證了模板返回時,前端接收到的響應中有csrftoken這個cookie,方法見程式碼。
- 以上方法並沒有嚴格意義的前後分離,如果模板中有form表單,可以直接在模板中新增
{% csrf_token %}
。
第二種方式
- 前後完全分離,前端頁面直接通過獲取靜態檔案得到,然後直接傳送ajax請求,得到csrftoken,此時需要一個檢視函式來返回token值
def get_token(request):
token = django.middleware.csrf.get_token(request)
return JsonResponse({'token': token})
- 如此即可在瀏覽器將token值儲存在cookie中,然後通過第一種方式中取得cookie的方法獲取cookie。
傳送ajax請求
- 以上方式得到csrftoken後,需要將其新增到請求頭中,方法見程式碼
- 此時,csrf驗證不再成為阻礙