【问题标题】:Reactjs Token expiration timeReactjs Token 过期时间
【发布时间】:2018-11-06 19:05:38
【问题描述】:

我用 Reactjs 登录制作单页网页。问题是如何以及在哪里保存令牌过期时间。我是否需要保存在 sessionStore 中,但是当浏览器关闭时,所有数据都会被删除。本地商店?但随后数据将永远存在。或者我可以保存在 localStore 中,并且在每个事件中我必须添加功能,检查 localStore 的过期时间,当事件触发成功时再次更新 localstore?但是代码看起来很糟糕……性能问题呢?这种方法可以接受吗?

【问题讨论】:

  • 您只需要在主组件的componentDidMount()中设置一个间隔来不时调用刷新函数
  • 是的,方法是可以接受的并且可以很好地实施。您也可以考虑使用 cookie。但是不要让代码看起来很糟糕:P,创建一个不同的文件来执行所有会话活动/功能。

标签: reactjs login token singlepage


【解决方案1】:

你使用 Redux && Redux thunk 吗?

如果是这样,这是我遵循的方法:

  1. 当用户登录时,我将访问和刷新令牌保留在商店中。
  2. 我使用 redux-persist 将令牌保存在 localStorage(还有其他存储)中,以便在用户刷新/重新打开应用程序时持久保存它们。
  3. 有一个中间件,在每个 API 请求之前检查访问令牌是否仍然有效。
    1. 如果已过期,请尝试使用刷新令牌刷新访问令牌。
    2. 如果没有过期,只需执行 API 请求即可。
  4. 如果用户注销或两个令牌都已过期,那么我会清除 Store(也通过 redux-persist 清除 localStorage)。

更多细节,对于上述流程,您可以查看原始答案(我的灵感来自哪里):https://stackoverflow.com/a/36986329/4312466

如果您不使用任何状态管理库:

遵循上述想法是一种选择,但您可以:

  1. 将令牌保存在localStore
  2. 在您的应用程序中创建一个层(类、函数或任何您想要的),它将充当中间件。每次要调用 API 时,都会先调用该层,这将检查令牌是否有效:
    1. 如果是这样,只有这样才会触发 API 请求。
    2. 如果令牌过期,该层将在尝试刷新令牌时将所有进一步的 API 请求保留在队列中。

但是,如果你做SPA并且有复杂的状态操作,我建议你使用一些状态管理库。

【讨论】:

    猜你喜欢
    • 2018-12-22
    • 2018-11-19
    • 1970-01-01
    • 2021-04-07
    • 2016-04-15
    • 2020-04-06
    • 2023-03-19
    • 2021-12-29
    • 2012-05-27
    相关资源
    最近更新 更多