【问题标题】:Change django csrf token in ajax prefilter在 ajax 预过滤器中更改 django csrf 令牌
【发布时间】:2018-03-02 08:45:44
【问题描述】:
这是我知道的 -
- @ensure_csrf_cookie 在我正在加载模板的视图方法上。
- 在模板中我需要那个 csrf 令牌,所以我从 cookie 中获取它并进行第 3 方 api 调用。
- 通过第 3 方 api 调用,我得到了相同的 csrf 令牌。
- 在来自该模板的所有 ajax 调用中,有一个 ajax 前置过滤器设置从浏览器 cookie 发送 csrf 令牌。
- 但我想发送我从第 3 方 api 调用中获得的 csrf 令牌。
如何覆盖 ajax 预过滤器?
让我知道这个问题是否正确。或者我理解错了。
【问题讨论】:
标签:
jquery
ajax
django
cookies
【解决方案1】:
这对我来说是一个修复。请参阅以下步骤 -
我从 django.views.decorators.csrf import csrf_protect 导入并在该模板中 api 将从 ajax 调用的方法上放置了一个装饰器 @csrf_protect。
-
在该模板中针对上述方法的 ajax 调用中,我已添加
标题:{
“X-CSRFToken”:[我从第 3 方 Api 调用中获得的 CSRF 令牌]
}
-
在我的 ajax 预过滤器中,如果已检查此标头参数是否已设置,则停止从浏览器 cookie 设置它。
if(!options.headers["X-CSRFToken"])
options.headers["X-CSRFToken"] = [来自浏览器 cookie 的 CSRF 令牌];
}