我有一个仪表板/应用程序系统,其中应用程序使用JWT来授权用户。 JWT有一个小时的TTL
,在这种情况下,一旦最终找到401
,我便拦截响应,使用刷新方法重新授权,然后重新提出原始请求。
通过以下代码,我可以很好地工作:
createAxiosResponseInterceptor() {
this.axiosResponseInterceptor = window.axios.interceptors.response.use(
response => {
return response;
},
error => {
if (error.config && error.response && error.response.status === 401) {
window.axios.interceptors.response.eject(this.axiosResponseInterceptor);
return window.axios.post('/auth/refresh')
.then(
(rsp) => {
store.save('token', rsp.data.access_token).then(
() => {
global.token = rsp.data.access_token;
this.createAxiosResponseInterceptor();
error.config.headers.Authorization = "Bearer " + rsp.data.access_token;
return axios.request(error.config);
}
);
}
)
.catch(
error => {
console.error('DELETE TOKEN');
}
)
}
return Promise.reject(error);
}
);
}
我的问题是发出请求的原始代码,如果成功,我将如何继续执行应该运行的代码?
在这种情况下,我的原始请求:
componentDidMount() {
axios.get('/app/settings')
.then(
rsp => {
// This is where I'm trying to get back to after request
// has been intercepted.
let s = rsp.data;
store.save('user', s.user)
.then(() => {
this.props.navigation.goBack(false);
})
})
.catch(
err => {
console.warn(err);
}
)
}
我已发出此请求,但失败了,我已进入.catch()
函数,此请求已被拦截,并确认它为401
。我已经刷新了令牌,重新发出了请求,并且收到了200
,一切顺利。然后我该如何返回此.then()
函数以使其继续执行应有的代码?