axios.interceptors.request.use(config => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = Bearer ${token};
}
return config;
});
// 获取新的token router.post('/refresh', async (req, res) => { try { const refreshToken = req.cookies.refreshToken; const { data } = await axios.post('https://auth.example.com/token', { refreshToken }); res.send(data); } catch (error) { res.status(401).send(error); } });
// 设置新的token
axios.interceptors.response.use(
response => {
const newToken = response.data.token;
if (newToken) {
localStorage.setItem('token', newToken);
}
return response;
},
error => {
const { config, response } = error;
const originalRequest = config;
if (response.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
return axios.post('/refresh')
.then(res => {
if (res.status === 200) {
axios.defaults.headers.common.Authorization = Bearer ${res.data.token};
return axios(originalRequest);
}
});
}
return Promise.reject(error);
}
);