axios interceptors response
对于刷新令牌,我的代码是:
axios.interceptors.response.use(response => {
return response;
}, error => {
if (error.response && error.response.data.error === 'token_expired') {
axios.get('/refresh')
.then(response => {
let newToken = response.data.newToken;
dispatch(refreshToken(newToken))
error.config.headers.Authorization = 'Bearer ' + newToken;
console.log(error.config);
return axios.request(error.config);
});
} else {
return Promise.reject(error);
}
});
axios.interceptors.response
在刷新令牌重新运行之前
undefined
我能给谁修这个?
更新
axios.interceptors.response.use(response => {
return response;
}, error => {
if (error.response && error.response.data.error === 'token_expired') {
dispatch(getNewToken(newToken => {
error.config.headers.Authorization = 'Bearer ' + newToken;
return axios.request(error.config);
}))
} else {
return Promise.reject(error);
}
});
而getNewToken是:
export const getNewToken = (onSuccess) => {
return dispatch => {
axios.get('/refresh')
.then(response => {
let newToken = response.data.newToken;
dispatch(refreshToken(newToken))
onSuccess(newToken);
});
}
}
当我检查browser web developer时,在network中这个工作和请求用新的令牌重复,但我的操作不会再次运行以呈现响应
更新2:
我的中间件:
const jwtTokenRefresh = ({ dispatch, getState }) => (next => (action) => {
const timeStamp = Math.floor(Date.now() / 1000);
const expiration = getState().auth.expiration;
if (expiration && timeStamp > expiration) {
axios.get('/refresh')
.then(response => {
let newToken = response.data.newToken;
dispatch(refreshToken(newToken))
})
.then(() => {
next(action);
})
}else {
return next(action);
}
});
和刷新令牌操作:
export const refreshToken = dispatch => {
return dispatch => {
axios.get('/refresh')
.then(response => {
console.log(response);
let newToken = response.data.newToken;
const rememberMe = localStorage.getItem('token') ? true : false;
dispatch(authSuccess(newToken, rememberMe))
});
}
}