检查auth令牌在SPA中是否有效的好方法

时间:2018-10-04 11:36:57

标签: reactjs redux

因此,我们在React SPA中使用令牌验证。保存在cookie中的令牌如下所示:

access_token: "BIG-LONG-ASS_TOKEN"
expires_in: 1538663229368
token_type: "Bearer"

在重新加载页面时,令牌会正确过期,但是当用户在客户端中保持活动状态几天并浏览其他页面/请求时,我希望能够在令牌过期时注销用户。你们通常如何解决?我认为我可以执行一个与我的“ expires_in”匹配的计划函数,该函数在定时器结束时执行注销redux操作,或者在每条路径上对其进行检查。

欢迎所有提示!

编辑: 在每条路由上这样做都不是一件好事,因为可以在同一条路由上调用一些api调用。基本上,我希望能够从返回的401/403中分派注销,但可以将其集中化,因此我不必在每次执行的已授权操作中都将其捕获。

2 个答案:

答案 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} />