如何在 react native 和 redux 应用程序中处理 JWT 令牌到期

Posted

技术标签:

【中文标题】如何在 react native 和 redux 应用程序中处理 JWT 令牌到期【英文标题】:How to handle JWT token expiry in react native and redux app 【发布时间】:2019-09-11 10:49:57 【问题描述】:

我对实施 JWT 还很陌生。在实现 JWT 时我有几个问题。我正在使用 axios 发出请求。 当用户登录或注册时。我得到了一个 accessToken,它会在几天后过期。我没有 refreshToken 因为我认为后端是建立在 django rest 框架上的。

现在,如果我在请求中收到状态码 401,我会尝试检查令牌是否已过期,如果是,则刷新 accessToken,但有时即使刷新令牌 api 返回 400,表明此令牌也是过期了,此时我需要用户注销。

我认为这是一个糟糕的用户体验,为什么我们不能使用旧令牌刷新令牌。有没有办法让它不过期?谁能指出一个通过正确实现 axios 拦截器解决以下问题的示例?

【问题讨论】:

【参考方案1】:

由于您使用的是 Django REST 框架,请考虑将 Djoser 与 JWT 令牌一起使用,然后 djoser 从后端向您发送访问和刷新令牌。后端准备完成后,请按照此 simple article 从 react native 自动刷新和访问令牌。希望对你有帮助。

【讨论】:

【参考方案2】:

您可以创建一个永不过期的令牌,但出于安全原因,这是一个坏主意。如果令牌被盗,那么有人可以随时访问用户的数据。您可以在exp 声明中设置到期日期。在这里阅读更多:https://gist.github.com/soulmachine/b368ce7292ddd7f91c15accccc02b8df

【讨论】:

所以基本上我需要将设备名称或设备存储在 aud 变量中并检查它是否相同然后不要刷新令牌。我说的对吗?

以上是关于如何在 react native 和 redux 应用程序中处理 JWT 令牌到期的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Redux 在 React Native 中使用线程调用 API?

如何使用 redux 让根组件在 react-native 中重新渲染(开源项目)

React Native - Redux 不会立即更新

如何在react-native / redux中处理外部数据库更新?

如何使用 redux 模式在 react native 中刷新组件?

如何在reducer中专门使用redux来获取react-native中的API?