reactjs - 检查令牌过期并注销用户
问题描述
我想根据令牌的到期注销用户。我知道 Axios 调用有问题,但我不确定是什么问题。此外,它似乎可以手动注销用户,但仍然会出现错误。
actions.js
:
export const logoutUser = (history) => ({
type: LOGOUT_USER,
payload: { history },
});
store.js
:
export const checkTokenExpiration = (next) => (action) => {
const token =
JSON.parse(localStorage.getItem('user')) &&
// eslint-disable-next-line dot-notation
JSON.parse(localStorage.getItem('user'))['token'];
if (jwtDecode(token).exp < Date.now() / 1000) {
next(action);
localStorage.clear();
}
next(action);
};
const logoutAsync = async (history) => {
await axios
.logoutUser()
.checkTokenExpiration.then((user) => user)
.catch((error) => error);
console.log();
history.push(adminRoot);
};
这是错误消息:
axios__WEBPACK_IMPORTED_MODULE_3___default.a.logoutUser 不是函数
上面的错误发生在任务logout由takeEvery(LOGOUT_USER, logout)创建,由watchLogoutUser创建,由rootSaga创建,由rootSaga创建
解决方案
事实证明,我一直在错误的地方进行检查。
在一些帮助下发现我可以在另一个函数下检查,这里是代码:
const ProtectedRoute = ({
component: Component,
roles = undefined,
...rest
}) => {
function isAuthActive() {
const user = JSON.parse(localStorage.getItem('User'));
const expiryTime = new Date(user?.expiration * 1000).toLocaleString(
'en-sg'
);
const currentTime = new Date().toLocaleString('en-sg');
if (expiryTime < currentTime) {
setCurrentUser();
localStorage.clear();
return <Redirect to="/login" />;
}
return true;
}
};
基本上只是根据令牌给出的到期时间检查当前时间。其余的设置在后端服务器中。
推荐阅读
- python - Pyopengl - 在 glUseProgram 之前和之后有 glGetUniformLocation 和 glUniformMatrix4fv 有什么区别?
- excel - (Excel)有没有办法自动突出两个之间较大的数字?
- javascript - 即使资产链接正确,TWA 也会显示地址栏
- cmake - CMake 子模块无法解决 MSVC 上的项目依赖关系“无法打开包含文件”
- sql - DENSE_RANK() 和 LEAD() 函数之间是否存在依赖关系/互连?
- java - 无法使用 .contains 方法检测船舶是否漂浮
- python - 来自数据框的嵌套字典,内部字典包含熊猫系列作为值
- r - 使用 geom_text 和 facet_grid 时在箱形图上显示紧凑字母
- google-chrome-extension - 我是否需要在 content_scripts 中为 Chrome 扩展指定匹配项?
- python-3.x - 如何将输入与.py 3中的字符串完全匹配