因此,我们在React SPA中使用令牌验证。保存在cookie中的令牌如下所示:
access_token: "BIG-LONG-ASS_TOKEN"
expires_in: 1538663229368
token_type: "Bearer"
在重新加载页面时,令牌会正确过期,但是当用户在客户端中保持活动状态几天并浏览其他页面/请求时,我希望能够在令牌过期时注销用户。你们通常如何解决?我认为我可以执行一个与我的“ expires_in”匹配的计划函数,该函数在定时器结束时执行注销redux操作,或者在每条路径上对其进行检查。
欢迎所有提示!
编辑: 在每条路由上这样做都不是一件好事,因为可以在同一条路由上调用一些api调用。基本上,我希望能够从返回的401/403中分派注销,但可以将其集中化,因此我不必在每次执行的已授权操作中都将其捕获。
答案 0 :(得分:1)
当您使用过期的令牌访问API时,它可能返回HTTP状态401或403响应,您可以在客户端中检查这些响应并进行必要的状态更改。
仅在用户闲置一段时间后尝试在UI中执行某项操作时,仅使用上述方法可能会使用户烦恼,仅将其定向到登录屏幕。为解决此问题,您可以在检测到用户存在并要求用户登录之前,调用某些服务器端点(用于令牌验证的现有端点或专用端点)。
答案 1 :(得分:1)
您可以创建一个单独的组件来对用户进行身份验证,如下所示:
const AuthenticatedRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={(props) => {
return isValid ? <Component {...props} /> : <Redirect to={{ pathname: '/sign_out' }} />
}} />
);
const ConnectedAuthenticatedRoute = withRouter(AuthenticatedRoute);
export default ConnectedAuthenticatedRoute;
和在路线中,您可以执行以下操作:
<AuthenticatedRoute exact path="/home" component={Dashboard} />