美文网首页
Django csrf机制设置csrftoken

Django csrf机制设置csrftoken

作者: NIGangJun | 来源:发表于2019-08-16 14:13 被阅读0次

最近使用vue+django做一个项目

问题:

前端发get请求正常,发post请求的时候报错(403 Forbidden (CSRF token missing or incorrect.))

上度娘看了看,怎么都是注掉'django.middleware.csrf.CsrfViewMiddleware'?

解决

找了一圈没有找到自己想要的答案,回过头看看错误信息,意思好像是我缺少csrf token
那这个csrf token在哪里?再上度娘看看,理解一下答案

  • 如果仅是django项目,只需要在表单里加一个{% csrf_token %}(本文不涉及)
  • 前后分离,需要前端发请求的时候在请求头里添加'X-CSRFToken'

按照描述的答案,'X-CSRFToken'对应的csrftoken是需要在cookie里取的。由于这个cookie是服务器传过来的, 那么剩下的就简单了。

# 设置csrftoken的方式有好几种,我采用了装饰器的方法,方便简单。
from django.http import JsonResponse
from django.views.decorators.csrf import ensure_csrf_cookie

@ensure_csrf_cookie
def demo_data_post(request):
    return JsonResponse({"msg": "OK"})

前端调用这个view提供的接口,在cookie里就多了一个'csrftoken'的值。然后拿着这个再做post请求,就不会出现上面的问题。

最后总结理解一下这个方法的实现过程:

  • 前端发起请求(比如登录验证或者普通get请求),django通过ensure_csrf_cookie装饰器让客户端cookie存一个'csrftoken'
  • 要求类似post请求(涉及到数据相关的请求),就需要前端发请求的时候,在请求头里加入X-CSRFToken: csrftoken

相关文章

网友评论

      本文标题:Django csrf机制设置csrftoken

      本文链接:https://www.haomeiwen.com/subject/larfsctx.html