You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

accessTokensMiddleware.js 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import axios from "axios";
  2. import jwt from "jsonwebtoken";
  3. import { JWT_REFRESH_TOKEN, JWT_TOKEN } from "../../constants/localStorage";
  4. import {
  5. // addHeaderToken,
  6. attachBeforeRequestListener,
  7. } from "../../request/index";
  8. import {
  9. authScopeStringGetHelper,
  10. // authScopeSetHelper,
  11. } from "../../util/helpers/authScopeHelpers";
  12. import { logoutUser, refreshUserToken } from "../actions/login/loginActions";
  13. // import { setUserAccessToken } from "../actions/user/userActions";
  14. //Change URL with .env
  15. // const baseURL = "http://192.168.88.143:3001/"; // DULE
  16. // const baseURL = "http://192.168.88.175:3005/";
  17. // const baseURL = "https://trampa-api.dilig.net/";
  18. const baseURL = "https://trampa-api-test.dilig.net/";
  19. // const baseURL = "http://192.168.88.150:3001/"; // DJOLE
  20. // const baseURL = "http://localhost:3001/";
  21. // const baseURL = process.env.REACT_APP_BASE_API_URL
  22. //Interceptor unique name
  23. export const accessTokensMiddlewareInterceptorName = "ACCESS_TOKEN_INTERCEPTOR";
  24. export default ({ dispatch }) =>
  25. (next) =>
  26. (action) => {
  27. attachBeforeRequestListener(async (response) => {
  28. const jwtToken = authScopeStringGetHelper(JWT_TOKEN);
  29. const refresh = authScopeStringGetHelper(JWT_REFRESH_TOKEN);
  30. if (!jwtToken || !refresh) return Promise.resolve(response);
  31. const jwtTokenDecoded = jwt.decode(jwtToken);
  32. const refreshTokenDecoded = jwt.decode(refresh);
  33. if (!response.headers?.Authorization) {
  34. response.headers.Authorization = `Bearer ${jwtToken}`;
  35. }
  36. // If refresh token is expired, log out user
  37. if (new Date() > new Date(refreshTokenDecoded?.exp * 1000)) {
  38. dispatch(logoutUser());
  39. }
  40. // If access token is expired, refresh access token
  41. if (new Date() > new Date(jwtTokenDecoded.exp * 1000)) {
  42. const axiosResponse = await axios.post(`${baseURL}auth/refresh`, {
  43. token: refresh,
  44. });
  45. const newToken = axiosResponse.data;
  46. response.headers.Authorization = `Bearer ${newToken}`;
  47. dispatch(refreshUserToken(newToken));
  48. }
  49. return Promise.resolve(response);
  50. }, accessTokensMiddlewareInterceptorName);
  51. next(action);
  52. };