Ajax 用 flask-seasurf 调用
Ajax call with flask-seasurf
我正在本地主机上开发一个小应用程序并使用 flask-seasurf 来防止 csrf 攻击。我所有的非 ajax 表格都可以在 flask-seasurf 上正常工作。我有一个表单在表单提交时触发对“/checkajax”的 ajax 调用;这一直有效,直到我开始使用 flask-seasurf 但现在我收到控制台错误并且 ajax 不起作用:
Warning in flask_seasurf: Forbidden (CSRF token missing or incorrect): /checkajax
触发 ajax 调用的表单具有标准隐藏字段,其中包含嵌入在 jinja 页面模板中的 flask-seasurf 的 'csrf_token()' 函数调用:
<input id="csrf-token" type="hidden" name="_csrf_token" value="{{ csrf_token() }}">
ajax调用结构是:
$("#submit").submit(function(event) {
event.preventDefault();
$.ajax({
url: "/checkajax",
data: {...},
type: "POST",
datatype: "text",
success: function(response){
...
},
error: function(response) {
...
}
});
});
我可以从站点 cookie 中看到,有一个由 flask-seasurf 生成的“_csrf_token”条目。谁能就此 ajax 调用现在不起作用的原因给出一些见解?
我的问题的解决方案是修改 ajax 调用的 header 以包括 X-CSRFToken 定义为我表单中的 flask-seasurf 标记:
var csrf_token = $("csrf-token").val()
$("#submit").submit(function(event) {
event.preventDefault();
$.ajax({
headers: {"X-CSRFToken", csrf_token},
url: "/checkajax",
data: {...},
type: "POST",
datatype: "text",
success: function(response){
...
},
error: function(response) {
...
}
});
});
希望对其他人有所帮助。
我正在本地主机上开发一个小应用程序并使用 flask-seasurf 来防止 csrf 攻击。我所有的非 ajax 表格都可以在 flask-seasurf 上正常工作。我有一个表单在表单提交时触发对“/checkajax”的 ajax 调用;这一直有效,直到我开始使用 flask-seasurf 但现在我收到控制台错误并且 ajax 不起作用:
Warning in flask_seasurf: Forbidden (CSRF token missing or incorrect): /checkajax
触发 ajax 调用的表单具有标准隐藏字段,其中包含嵌入在 jinja 页面模板中的 flask-seasurf 的 'csrf_token()' 函数调用:
<input id="csrf-token" type="hidden" name="_csrf_token" value="{{ csrf_token() }}">
ajax调用结构是:
$("#submit").submit(function(event) {
event.preventDefault();
$.ajax({
url: "/checkajax",
data: {...},
type: "POST",
datatype: "text",
success: function(response){
...
},
error: function(response) {
...
}
});
});
我可以从站点 cookie 中看到,有一个由 flask-seasurf 生成的“_csrf_token”条目。谁能就此 ajax 调用现在不起作用的原因给出一些见解?
我的问题的解决方案是修改 ajax 调用的 header 以包括 X-CSRFToken 定义为我表单中的 flask-seasurf 标记:
var csrf_token = $("csrf-token").val()
$("#submit").submit(function(event) {
event.preventDefault();
$.ajax({
headers: {"X-CSRFToken", csrf_token},
url: "/checkajax",
data: {...},
type: "POST",
datatype: "text",
success: function(response){
...
},
error: function(response) {
...
}
});
});
希望对其他人有所帮助。