setupInterceptors.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import api from "./api";
  2. import TokenService from "./token.service";
  3. import AuthService from "./auth.service";
  4. const setup = (store) => {
  5. api.interceptors.request.use(
  6. (config) => {
  7. const token = TokenService.getLocalAccessToken();
  8. if (token)
  9. config.headers["Authorization"] = `Bearer ${token}`
  10. return config;
  11. },
  12. (error) => {
  13. console.log(error);
  14. return Promise.reject(error);
  15. }
  16. );
  17. api.interceptors.response.use(
  18. (res) => {
  19. return res;
  20. },
  21. async (err) => {
  22. const originalConfig = err.config;
  23. if (originalConfig.url !== "/api-token/" && err.response) {
  24. // Access Token was expired
  25. if (err.response.status === 401 && !originalConfig._retry) {
  26. console.log("Access token expired!")
  27. originalConfig._retry = true;
  28. try {
  29. const { access } = await AuthService.refreshAccessToken();
  30. console.log("New acces token: ", access)
  31. store.dispatch('auth/refreshToken', access);
  32. console.log("Retrying original request")
  33. return api(originalConfig);
  34. } catch (_error) {
  35. return Promise.reject(_error);
  36. }
  37. }
  38. }
  39. return Promise.reject(err);
  40. }
  41. );
  42. };
  43. export default setup;