Javascript localstorage do note更新JWT Reactjs
这是系统流程:Javascript localstorage do note更新JWT Reactjs,javascript,reactjs,axios,local-storage,Javascript,Reactjs,Axios,Local Storage,这是系统流程: 我登录了一个将用户数据保存在localstorage中的应用程序 我有一个部件 读取本地存储以获取用户数据,如JWT 问题是,当我进行新登录时,localStorage不会使用新数据进行更新,因此我无法使用localStorage新用户数据进行申请。 我发现,如果手动更新页面,则会更新其本地存储。 在reactjs中,我使用react router dom来导航页面 如何获取新的登录数据以更新localStorage //登录 api.post('users/login',
- 我登录了一个将用户数据保存在localstorage中的应用程序李>
- 我有一个部件 读取本地存储以获取用户数据,如JWT
我发现,如果手动更新页面,则会更新其本地存储。
在reactjs中,我使用react router dom来导航页面 如何获取新的登录数据以更新localStorage
//登录
api.post('users/login',{email,password})//登录
。然后(res=>{
localStorage.removietem('user_info');//我从localStorage中删除ond数据
if(res){//if-api做post
让data=JSON.stringify(res.data.data)
setItem('user_info',data);//在localStorage中保存新数据
history.push(“/”);//转到主页
}
}).catch(错误=>{
this.setState({noAuth:true})
console.log('error');
});代码>创建Axios实例时,传递的是“静态”值
如果该值不存在,它将变为
'Authorization': `Bearer undefined`,
要修复它,您需要在axios
中添加一个拦截器,以便在每次请求时更新该令牌的值,而不仅仅是在创建实例时
api.interceptors.request.use(
config => {
const user_info = JSON.parse(localStorage.getItem('user_info'));
const newConf = {
...config,
headers: {
...config.headers,
'Authorization': `Bearer ${user_info.auth_token}`,
}
}
},
error => Promise.reject(error)
)
我可以用我朋友JCQuintas的提示来做这件事
从“axios”导入axios;
从“../../components/Util/Auth”导入{isAuthenticated};
导出常量令牌='Z31XC52XC4';
const api=axios.create({
//baseURL:'https://url-from/api/“,//PRODUÃO
baseURL:'https://url-from/api/“,//DESENVOLVIMENTO
标题:{
“Accept':“application/json,text/plain,*/*”,
“访问来源”:“D”,
//'Authorization':'Bearer${auth_token}`,
'公司令牌':`${Token}`
}
});
api.interceptors.request.use(函数(配置){
console.log(config);
如果(isAuthenticated()){
var user_info=JSON.parse(localStorage.getItem('user_info'));
var auth_token=user_info.auth_token;
}
config.headers.Authorization=`Bearer${auth_token}`;
返回配置;
});
导出默认api你能简单解释一下问题是什么吗?因为根据代码,它设置了新项目是的,代码设置了新项目,但是新数据不会持续到我更新页面为止。就好像在刷新页面之前,旧数据一直保存在本地存储中。问题是react router dom在导航页面时不更新请添加不调用render的react组件,在我看来,似乎没有正确设置道具。新登录是否意味着注销然后登录?1。您确定res
不是空的吗?2.您确定res.data.data
正是您需要存储的内容吗?我这样问是因为它肯定会从存储中删除旧的user\u info
,但我不确定您是否正在回写未定义的值。我无法使用拦截器,我编辑了问题,但我得到了错误:未捕获(承诺中)类型错误:无法读取未定义的属性“cancelToken”
api.interceptors.request.use(
config => {
const user_info = JSON.parse(localStorage.getItem('user_info'));
const newConf = {
...config,
headers: {
...config.headers,
'Authorization': `Bearer ${user_info.auth_token}`,
}
}
},
error => Promise.reject(error)
)