我有一个DFR API端点:
url = http://127.0.0.1:8000/x/y/
运行JS代码的页面的网址:http://127.0.0.1:8000/x/z/1/
我已经在浏览器中以User1身份登录。
POST请求-来自DRF浏览器api-很好。
GET请求-来自javascript-很好。
POST请求-来自javascript-403错误。
所以也许我不知道如何从JS发出经过身份验证的Ajax请求。当我从浏览器api执行相同的请求时,可能是浏览器负责身份验证。
我当前的js代码:
axios({
method: 'post',
baseURL: window.location.origin,
url: '/x/y/',
// adding auth header also gives same 403 error for post request
// headers: {
// Authorization: 'Token e77b8ca898b51cde72dcf2aa2c385942d771e972'
// },
data: {
name: 'xyz'
},
responseType: 'json',
})
.then(function (response) {
console.log(' success');
})
.catch(function (error) {
console.log(' error=', error.message);
});
答案 0 :(得分:2)
如果您使用的是chrome浏览器,请进入控制台ctrl+shift+j
,然后进入网络。
发出发布请求后,我们可以在此网络标签中看到错误消息。
我的帖子请求出现以下错误:
"CSRF Failed: CSRF token missing or incorrect."
要在axios ajax请求上添加csrf令牌,请将以下代码行放在js文件的开头:
axios.defaults.xsrfCookieName = 'csrftoken';
axios.defaults.xsrfHeaderName = "X-CSRFTOKEN";
答案 1 :(得分:1)
在请求中添加CSRF令牌时,CSRF会导致403错误。尝试在请求标头中添加csrf令牌