Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript localstorage do note更新JWT Reactjs_Javascript_Reactjs_Axios_Local Storage - Fatal编程技术网

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
问题是,当我进行新登录时,localStorage不会使用新数据进行更新,因此我无法使用localStorage新用户数据进行申请。
我发现,如果手动更新页面,则会更新其本地存储。
在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}`;
返回配置;
});

导出默认apires
不是空的吗?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)
)