gpt4 book ai didi

ajax - Django - 由于 csrf token 在 Windows 上不工作,AJAX 不工作

转载 作者:行者123 更新时间:2023-12-02 08:26:49 25 4
gpt4 key购买 nike

我在 Linux 上开发了我的应用程序,AJAX 请求工作正常。我已将应用程序拉到 Windows 机器上,但 AJAX 请求失败,我只收到 403 Forbidden 错误。从网上看,我认为这是csrf token 的问题。在 Linux 中,我可以在 AJAX 请求的 Cookies 下看到 csrftoken:"AjQzJy3tRZ2awslgdibkDTvQgANFQKmP"。我没有在 Windows 中看到任何 cookie 设置。

这是我用来获取 csrf cookie 的 Javascript 代码。来自https://docs.djangoproject.com/en/1.8/ref/csrf/

function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}

这是我提交 AJAX 请求的地方:

function refreshInformation(){
$.ajax({
type: "POST",
url: "get_flows_info",
data: {
csrfmiddlewaretoken: getCookie('csrftoken')
}
dataType : "json",
async : true,
error : function(data){
alert('AJAX error:' + data);
},
success : function(json_data){
// do stuff...
},
});
}

这是请求的 View :

def get_flows_info(request):
if request.is_ajax():

# do stuff...

return HttpResponse(json.dumps(ret), content_type='application/json')

我找到了这个:Django CSRF check failing with an Ajax POST request但 jQuery 没有任何区别。

有什么帮助吗?

谢谢。

最佳答案

这里是可以做的:

  1. 检查 CSRF token cookie 名称。

    参见 CSRF_COOKIE_NAME了解更多信息。

  2. 添加ensure_csrf_cookie装饰器到您的 View (呈现页面的那个)。

    根据 the docs :

    Warning

    If your view is not rendering a template containing the csrf_token template tag, Django might not set the CSRF token cookie. This is common in cases where forms are dynamically added to the page. To address this case, Django provides a view decorator which forces setting of the cookie: ensure_csrf_cookie().

  3. 假设 CSRF token cookie 名称是 csrftoken,尝试发送 X-CSRFToken header 。

    $.ajax({
    // Your options here.
    headers: {'X-CSRFToken': getCookie('csrftoken')}
    });

阅读Cross Site Request Forgery protection获取更多信息。

关于ajax - Django - 由于 csrf token 在 Windows 上不工作,AJAX 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31405092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com