Я изо всех сил пытаюсь заставить работать аксиальные перехватчики.
Когда срок действия моего токена истекает, он мне нужен, чтобы обновить токен доступа и повторить исходный запрос после обновления токена.У меня эта часть работает.
Проблема в том, что если у меня есть параллельные вызовы API, он будет повторять первый запрос только тогда, когда токен был впервые недействителен.
Вот мой код перехватчика:
export default function execute() {
let isRefreshing = false
// Request
axios.interceptors.request.use(
config => {
var token = Storage.getAccessToken() //localStorage.getItem("token");
if (token) {
console.log('Bearer ' + token)
config.headers['Authorization'] = 'Bearer ' + token
}
return config
},
error => {
return Promise.reject(error)
}
)
// Response
axios.interceptors.response.use(
response => {
return response
},
error => {
const originalRequest = error.config
// token expired
if (error.response.status === 401) {
console.log('401 Error need to reresh')
originalRequest._retry = true
let tokenModel = {
accessToken: Storage.getAccessToken(),
client: 'Web',
refreshToken: Storage.getRefreshToken()
}
//Storage.destroyTokens();
var refreshPath = Actions.REFRESH
if (!isRefreshing) {
isRefreshing = true
return store
.dispatch(refreshPath, { tokenModel })
.then(response => {
isRefreshing = false
console.log(response)
return axios(originalRequest)
})
.catch(error => {
isRefreshing = false
console.log(error)
// Logout
})
} else {
console.log('XXXXX')
console.log('SOME PROBLEM HERE') // <------------------
console.log('XXXXX')
}
} else {
store.commit(Mutations.SET_ERROR, error.response.data.error)
}
return Promise.reject(error)
}
)
}
Я не уверен, что мне нужно в блоке else, выделенном выше.
РЕДАКТИРОВАТЬ:
Когда я делаю
return axios(originalRequest)
в остальномБлок это работает, но я не доволен поведением.Он в основном повторяет все запросы снова и снова, пока токен не будет обновлен.Я бы предпочел просто повторить попытку после обновления токена. Любые идеи
Спасибо