Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

accessTokensMiddleware.js 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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 = "https://trampa-api.dilig.net/";
  16. // const baseURL = "http://192.168.88.175:3005/";
  17. // const baseURL = "http://192.168.88.175:3005/";
  18. //Interceptor unique name
  19. export const accessTokensMiddlewareInterceptorName = "ACCESS_TOKEN_INTERCEPTOR";
  20. export default ({ dispatch }) =>
  21. (next) =>
  22. (action) => {
  23. attachBeforeRequestListener(async (response) => {
  24. const jwtToken = authScopeStringGetHelper(JWT_TOKEN);
  25. const refresh = authScopeStringGetHelper(JWT_REFRESH_TOKEN);
  26. if (!jwtToken || !refresh) return Promise.resolve(response);
  27. const jwtTokenDecoded = jwt.decode(jwtToken);
  28. const refreshTokenDecoded = jwt.decode(refresh);
  29. if (!response.headers?.Authorization) {
  30. response.headers.Authorization = `Bearer ${jwtToken}`;
  31. }
  32. // If refresh token is expired, log out user
  33. if (new Date() > new Date(refreshTokenDecoded?.exp * 1000)) {
  34. dispatch(logoutUser());
  35. }
  36. // If access token is expired, refresh access token
  37. if (new Date() > new Date(jwtTokenDecoded.exp * 1000)) {
  38. const axiosResponse = await axios.post(`${baseURL}auth/refresh`, {
  39. token: refresh,
  40. });
  41. const newToken = axiosResponse.data.token;
  42. response.headers.Authorization = `Bearer ${newToken}`;
  43. dispatch(refreshUserToken(newToken));
  44. }
  45. return Promise.resolve(response);
  46. }, accessTokensMiddlewareInterceptorName);
  47. next(action);
  48. };