axios拦截器加autho验证,接口失效后重新请求的写法
//request拦截 service.interceptors.request.use( request => { let { current } = router.history; if ( store.getters["userStore/getToken"] && current.name !== "Login" && request.url != "/login/token/refresh" ) { //非登陆界面并且不是调用刷新接口并且本地要有token才可以加autho验证 request.headers.Authorization = `Bearer ${ store.getters["userStore/getToken"] }`; } return request; }, error => { console.error(error); return error; } ); //response拦截 service.interceptors.response.use( response => { return response; }, async error => { try { if (error && error.response) { // debugger; switch (error.response.status) { case 401: // 返回 401 清除token信息并跳转到登录页面也可以用这个逻辑 let refreshToken = store.getters["userStore/getParamRefreshToken"]; let { data } = await post("login/token/refresh", { refreshToken }); if (data.code === 200) { //刷新token成功后,获取新的token,覆盖旧的token,然后返回到报错的页面刷新掉 store.commit("userStore/setParamToken", data.result.access_token); //就是重新调用接口获取数据 var backoff = new Promise(resolve => { resolve(); }); return backoff.then(r => { return service(error.config); }); // window.location.reload(); } else { //refreshtoken失效的话,就直接到登陆页面 router.push("/login"); } return error; default: console.error(error); return error; } } else { console.error(error); return error; } } catch (error) { console.error(error); } } );
积累小的知识,才能成就大的智慧,希望网上少一些复制多一些原创有用的答案
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步