Javascript 使用JWT auth向DRF发出的axios请求失败

Javascript 使用JWT auth向DRF发出的axios请求失败,javascript,reactjs,django-rest-framework,axios,Javascript,Reactjs,Django Rest Framework,Axios,我有一个带有JWT auth的Django rest API,用于使用react构建注册和登录。 当尝试登录一个用户时,我得到一个403禁止的错误 我将csrf令牌添加到请求的头中,在使用控制台时,我可以在承诺中看到它,所以这不是问题所在 我只是不明白这篇文章是怎么写的 从“axios”导入axios; 从“js cookie”导入cookie; var csrftoken=Cookies.get(“csrftoken”); const axiosistance=axios.create({ 基

我有一个带有JWT auth的Django rest API,用于使用react构建注册和登录。 当尝试登录一个用户时,我得到一个403禁止的错误

我将csrf令牌添加到请求的头中,在使用控制台时,我可以在承诺中看到它,所以这不是问题所在

我只是不明白这篇文章是怎么写的

从“axios”导入axios;
从“js cookie”导入cookie;
var csrftoken=Cookies.get(“csrftoken”);
const axiosistance=axios.create({
基本URL:“http://127.0.0.1:8000/api/",
超时:5000,
标题:{
HTTP_X_CSRF_令牌:csrftoken,
授权:localStorage.getItem(“访问令牌”)
?“JWT”+localStorage.getItem(“访问令牌”)
:null,
“内容类型”:“应用程序/json”,
接受:“应用程序/json”,
事实上,
},
});
axiosInstance.interceptors.response.use(
(响应)=>响应,
(错误)=>{
const originalRequest=error.config;
//测试是否存在令牌,如果令牌不存在,则发送请求没有意义
如果(
getItem(“刷新令牌”)&&
error.response.status==401&&
error.response.statusText==“未经授权”
) {
const refresh_token=localStorage.getItem(“refresh_token”);
返回轴位
.post(“/token/refresh/”,{refresh:refresh\u token})
。然后((响应)=>{
setItem(“访问令牌”,response.data.access);
setItem(“刷新令牌”,response.data.refresh);
axiosInstance.defaults.headers[“授权”]=
“JWT”+response.data.access;
原始请求.头文件[“授权”]=
“JWT”+response.data.access;
返回axiosInstance(原始请求);
})
.catch((错误)=>{
控制台日志(err);
});
}
//特定的错误处理在别处完成
返回承诺。拒绝({…错误});
}
);
导出默认axiosInstance;
以及使用axios实例的登录组件:

import React,{Component}来自“React”;
从“./axiosApi”导入axiosInstance;
从“django react csrftoken”导入DjangoCSRFToken;
类登录扩展组件{
建造师(道具){
超级(道具);
this.state={用户名:,密码:};
this.handleChange=this.handleChange.bind(this);
this.handleSubmit=this.handleSubmit.bind(this);
}
手变(活动){
this.setState({[event.target.name]:event.target.value});
}
异步handleSubmit(事件){
event.preventDefault();
试一试{
const response=wait axiostation.post(“/token/get/”{
用户名:this.state.username,
密码:this.state.password,
});
axiosInstance.defaults.headers[“授权”]=
“JWT”+response.data.access;
setItem(“访问令牌”,response.data.access);
setItem(“刷新令牌”,response.data.refresh);
返回响应;
}捕获(错误){
投掷误差;
}
}
render(){
返回(
登录
用户名:
密码:
);
}
}
导出默认登录;
点击submit时的控制台:


请尝试从呼叫中删除CSRF。并使用@csrf_exepmt获取更多信息,请点击此链接。使用JWT就足够了

例如:

@csrf_exempt
def myEndpoint():
  // my code

请尝试从呼叫中删除CSRF。并使用@csrf_exepmt获取更多信息,请点击此链接。使用JWT就足够了

例如:

@csrf_exempt
def myEndpoint():
  // my code

请将@csrf\u exemp添加到您的DRF函数中,并检查是否works@EddwinPaz这是工作,但如果我理解正确,这不是一个好的移动安全明智的,不是吗?如果你有一个JWT它不是必要的。JWT为您提供所需的身份验证。CSRF用于会话管理。请将@CSRF\u EXEMP添加到您的DRF功能中,并检查是否works@EddwinPaz这是工作,但如果我理解正确,这不是一个好的移动安全明智的,不是吗?如果你有一个JWT它不是必要的。JWT为您提供所需的身份验证。CSRF用于会话管理。