【发布时间】:2020-02-10 15:21:23
【问题描述】:
根据 Flask-WTF 文档
这是使用 AJAX 时如何传递 CSRF Token
<script type="text/javascript">
var csrf_token = "{{ csrf_token() }}";
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrf_token);
}
}
});
</script>
有没有办法在使用 fetch API 时实现 CSRF 保护?
还尝试添加credentials: 'include',
*编辑 我收到 2 个错误:
the CSRF token is missing
The CSRF session token is missing
这是我的代码
let csrf_token = "{{ csrf_token() }}";
let payload = {
// some data
"csrf_token": csrf_token
}
let header = { 'content-type': 'application/json','accept': 'application/json',"X-CSRFToken": csrf_token}
paypal.Buttons({
createOrder: function(data, actions) {
return fetch(prefix.concat("/payment/paypalCreate"), {
method: "POST",
headers: header ,
body:JSON.stringify(payload),
credentials: 'include',
})
.then(function(res) {
return res.json();
}).then(function(data) {
console.log(typeof(data))
return data.id
})
.catch(err => {
console.log(err);
});
}
【问题讨论】:
-
不是完全重复,因为它是一个 Django 问题,但请参阅 stackoverflow.com/questions/43606056/…
-
@Selcuk 似乎不起作用。
标签: python flask csrf flask-wtforms