我正在测试发一个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 Cookie:
# 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 .
我有同样的问题($.cookie('csrftoken') 返回'undefined')。
问题出在我的 Django 配置中,我评论了以下行并且它有效:
#CSRF_COOKIE_HTTPONLY = True # Prevent client-side JavaScript access to the CSRF cookie
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11377 次 |
| 最近记录: |