[英]How to pass CSRF token manually for POST requests in ajax Django
We have a Django app which works as an iframe and it works fine in Safari and Chrome Browsers but in Safari it is blocking all the cookies and sessions that causes all the post request to be forbidden due to no CSRF Cookie. 那么有什么方法可以使用 AJAX 帖子传递这个 CSRF cookie 以及标题。
您可以尝试将以下内容添加到您的 ajax 帖子中
data['csrfmiddlewaretoken'] = jQuery("[name=csrfmiddlewaretoken]").val()
其中data
是您要发送到服务器的数据。 为此,您需要在您的网站上的某处放置{% csrf_token %}
,否则 jQuery 无法找到令牌值。
您可以从视图传递 csrf 令牌。 您可以通过以下两种方式之一来获取它(这些我已经亲自测试过,我确信它们有效):
csrf_token = self.request.COOKIES.get('csrftoken')
# import
from django.middleware.csrf import get_token
# in the view
csrf_token = get_token(request)
获取令牌后,您必须以任何您想要的方式将其传递给模板。 假设您只是将它添加到上下文变量中,如下所示:
context['csrf_token'] = csrf_token
太好了,现在在模板中,您必须将其与每个请求一起发送。 根据我的经验,您只需要对POST
请求执行此操作。 发送它的方法是将它包含在标题中:
let response = await fetch('/my/api/url', {
method: 'POST',
body: JSON.stringify({
'field1: 'value1',
...
}),
headers: {
'X-CSRFToken': "{{ csrf_token }}",
'Content-type': 'application/json'
}
}).then(...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.