token过期是怎样实现页面的无感刷新的?
时间: 2024-05-05 22:22:40 浏览: 102
在前端中,可以使用拦截器(Interceptor)来实现页面的无感刷新。拦截器可以拦截发送请求和接收响应的过程,在请求头中加入 token,并在响应头中检查 token 是否过期,如果过期则自动刷新 token 并重新发起请求,从而实现无感刷新页面。
具体实现方式如下:
1. 在请求头中加入 token:
```
axios.interceptors.request.use((config) => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
```
2. 在响应头中检查 token 是否过期:
```
axios.interceptors.response.use(
(response) => {
return response;
},
(error) => {
const originalRequest = error.config;
if (error.response.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
return axios
.post('/refreshToken', {
refreshToken: localStorage.getItem('refreshToken'),
})
.then((res) => {
if (res.status === 200) {
localStorage.setItem('token', res.data.token);
return axios(originalRequest);
}
});
}
return Promise.reject(error);
}
);
```
在响应头中检查 token 是否过期,如果过期则先使用存储在本地的 refreshToken 发送请求获取新的 token 并存储在本地,然后重新发起原来的请求。这样就可以实现页面的无感刷新。
阅读全文