Javascript React Redux刷新令牌
我试图在我的应用程序中实现刷新令牌,但我不知道为什么刷新API在刷新之前被调用了大约300次 我将在下面插入我的代码: api-call.jsx->每次服务器调用时调用的函数: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
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的分派被调用了很多次,我不知道为什么。有人知道我怎么修吗
提前谢谢