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

accessTokensMiddleware.js 1.8KB

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