【发布时间】:2020-07-17 10:04:56
【问题描述】:
我正在构建一个 React 应用来学习 React。我已经实现了上下文以在用户登录时存储有关用户的信息,并且还在本地存储中制作副本。我在 App 组件中验证用户是这样登录的
function App() {
const [user, setUser] = useContext(UserContext);
return (
<div className="App">
<Router>
<NavBar />
<Switch>
<Route path="/login" exact>
{!user.loggedIn ? <LoginForm /> : <Redirect to="/profile" />}
</Route>
</Switch>
</Router>
</div>
);
而且这工作得很好。但是如果令牌已经过期;我希望用户被强制进入登录页面。这意味着我需要检查每个路由请求的过期时间,因为用户可以在其中的配置文件中,如果他们点击另一个链接,他们将被重定向到登录组件。我应该如何处理这个? 我试图在应用程序组件中使用 useEffect ,当它满足条件时将状态loggedIn设置为true,并进行比较
useEffect(function () {
const ct = parseInt(Date.now().toString(), 10);
const iat = parseInt(localStorage.getItem('iat'), 10);
if (ct - iat < 60000) {
setUser({ loggedIn: true });
} else {
setUser({ loggedIn: false });
}
});
据我了解,每次渲染 App 组件时都会发生这种情况,因此我没有向 useEffect 提供任何输入,但这显然会引发 maximum update depth reached 错误。
我应该如何实现这种行为?
【问题讨论】:
标签: node.js reactjs session jwt