1. 程式人生 > >django前後端分離csrf驗證的解決方法

django前後端分離csrf驗證的解決方法

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驗證不再成為阻礙