javascript - React Redux 刷新令牌
问题描述
我试图为我的应用程序实现刷新令牌,但我不知道为什么刷新 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.actions.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,
});
auth.reducers.js
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,
};
auth.thunks.js
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 的调度被调用了很多次,我不知道为什么。有人知道我该如何解决吗?
提前致谢!
解决方案
推荐阅读
- amazon-web-services - Kibana 部署到 Kubernetes 集群返回 404
- vbscript - 如何检查 HTA VBScript 中的文件大小?
- windows-services - 避免在 Tomcat 的 service.bat 中使用 jvmOptions 并使用在 catalina.bat 中设置的 JAVA_OPTS
- web-crawler - 爬虫不只爬几页,还爬其他所有内容
- ruby-on-rails - 如何在 rails 中的一种方法上有两个不同的 redirect_to 操作?
- php - 使用 PHP 将 3 张 jpg 图像相互叠加
- javascript - Angularjs引导范围Rz-Slider宽度问题?
- mongodb - MongoDB在带有docker的设备上没有剩余空间
- reactjs - 未捕获的类型错误:无法分配给对象 '# 的只读属性 ''