django没有csrftoken在cookie中

Dav*_*Qin 12 django ajax

我正在测试发一个POST ajax请求

因为没有csrftoken,我得到了403

我按照文档,它仍然无法正常工作.

我发现名为csrftoken的cookie是空的

这意味着$ .cookie("csrftoken")返回null

谁能告诉我原因!!

如何将csrftoken设置为cookie

谢谢!!

Igo*_*gor 19

我认为您应该提供代码,以获取HTML/JS代码中的csrf令牌以及中间件的设置.

首先,您应该检查是否django.middleware.csrf.CsrfViewMiddleware已打开.

我有一个类似的问题,当我用python代码request.META.get('CSRF_COOKIE')获取令牌时.

当您在模板中使用此令牌时 - {% csrf_token %}Django注意到令牌已呈现并将Cookie设置为CsrfViewMiddleware.process_response.如果你以其他方式获得令牌值,Django将错过这个标志.因此它会生成一个令牌,但不会设置相应的cookie.

我在代码中有2个变通方法.您应该将它添加到用于使用JS代码生成模板的视图中.

1.您可以强制Django设置CSRF Coo​​kie:

# Force updating CSRF cookie
request.META["CSRF_COOKIE_USED"] = True
Run Code Online (Sandbox Code Playgroud)

2.如果你打电话,Django会自动设置CSRF_COOKIE_USEDget_token

from django.middleware.csrf import get_token
# don't use direct access to request.META.get('CSRF_COOKIE')
# in this case django will NOT send a CSRF cookie. Use get_token function
csrf_token = get_token(request)
Run Code Online (Sandbox Code Playgroud)

这些解决方案中的每一个都应单独工作.我建议使用get_token


jer*_*kan 14

您可能想要使用ensure_csrf_cookie视图装饰器(自Django 1.4起可用).csrftoken即使您不使用{{ csrf_token }}模板标记,也会设置cookie .


o_c*_*o_c 5

我有同样的问题($.cookie('csrftoken') 返回'undefined')。

问题出在我的 Django 配置中,我评论了以下行并且它有效:

#CSRF_COOKIE_HTTPONLY = True  # Prevent client-side JavaScript access to the CSRF cookie
Run Code Online (Sandbox Code Playgroud)