Javascript React Redux刷新令牌

Javascript React Redux刷新令牌,javascript,reactjs,authentication,react-redux,jwt,Javascript,Reactjs,Authentication,React Redux,Jwt,我试图在我的应用程序中实现刷新令牌,但我不知道为什么刷新API在刷新之前被调用了大约300次 我将在下面插入我的代码: api-call.jsx->每次服务器调用时调用的函数: import axios from "axios"; import store from "../state/store"; import { refreshUserToken } from "../../authentification/state/auth.thunk

我试图在我的应用程序中实现刷新令牌,但我不知道为什么刷新API在刷新之前被调用了大约300次

我将在下面插入我的代码:

api-call.jsx->每次服务器调用时调用的函数:

import axios from "axios";
import store from "../state/store";
import { refreshUserToken } from "../../authentification/state/auth.thunks";

export default async function api(
  method,
  url,
  params = {},
  headers = {},
  noAuth = false,
  restOfConfig = {}
) {
  const state = store.getState();
  const account = JSON.parse(JSON.stringify(state.auth));

  if (account.user) {
    const data = {
      username: account.user.username,
      refreshToken: account.user.refreshToken,
    };

    if (new Date(account.user.expires).getTime() < new Date().getTime()) {
      await store.dispatch(
        refreshUserToken(data, state.employees.tenantShortname)
      );
    }
  }

  const body = method === "get" ? "params" : "data";
  const config = {
    method,
    url,
    [body]: params,
    headers: noAuth
      ? headers
      : {
          Authorization: `Bearer ${
            localStorage.getItem("token")?.replace(/['"]+/g, "") ||
            sessionStorage.getItem("token")?.replace(/['"]+/g, "")
          }`,
          ...headers,
        },
    ...restOfConfig,
  };

  return axios.request(config);
}
auth.reducers.js

export const refreshToken = (user) => ({
  type: REFRESH_TOKEN,
  user,
});

export const refreshTokenSuccess = (user) => ({
  type: REFRESH_TOKEN_SUCCESS,
  user,
});

export const refreshTokenError = (message) => ({
  type: REFRESH_TOKEN_ERROR,
  message,
});
case REFRESH_TOKEN:
      return {
        ...state,
        user: action.user,
        loading: true,
        error: null,
      };

    case REFRESH_TOKEN_SUCCESS:
      setCurrentUser(action.user);
      return {
        ...state,
        user: action.user,
        loading: false,
        error: null,
      };

    case REFRESH_TOKEN_ERROR:
      return {
        ...state,
        user: null,
        loading: false,
        error: action.message,
      };
export const refreshUserToken = (data, tenantShortname) => async (dispatch) => {
  return await api(
    "post",
    apiUrlRefresh,
    data,
    tenantShortname !== "admin" ? { "tenant-name": tenantShortname } : {},
    true
  )
    .then((response) => {
      dispatch(refreshToken(response.data));
      return dispatch(refreshTokenSuccess(response.data));
    })
    .catch((err) => dispatch(refreshTokenError(err.response)));
};
auth.thunks.js

export const refreshToken = (user) => ({
  type: REFRESH_TOKEN,
  user,
});

export const refreshTokenSuccess = (user) => ({
  type: REFRESH_TOKEN_SUCCESS,
  user,
});

export const refreshTokenError = (message) => ({
  type: REFRESH_TOKEN_ERROR,
  message,
});
case REFRESH_TOKEN:
      return {
        ...state,
        user: action.user,
        loading: true,
        error: null,
      };

    case REFRESH_TOKEN_SUCCESS:
      setCurrentUser(action.user);
      return {
        ...state,
        user: action.user,
        loading: false,
        error: null,
      };

    case REFRESH_TOKEN_ERROR:
      return {
        ...state,
        user: null,
        loading: false,
        error: action.message,
      };
export const refreshUserToken = (data, tenantShortname) => async (dispatch) => {
  return await api(
    "post",
    apiUrlRefresh,
    data,
    tenantShortname !== "admin" ? { "tenant-name": tenantShortname } : {},
    true
  )
    .then((response) => {
      dispatch(refreshToken(response.data));
      return dispatch(refreshTokenSuccess(response.data));
    })
    .catch((err) => dispatch(refreshTokenError(err.response)));
};
因此,在api-call.jsx中,refreshUserToken的分派被调用了很多次,我不知道为什么。有人知道我怎么修吗

提前谢谢