Javascript 在react native with redux saga中实现令牌刷新

Javascript 在react native with redux saga中实现令牌刷新,javascript,react-native,oauth-2.0,react-redux,redux-saga,Javascript,React Native,Oauth 2.0,React Redux,Redux Saga,我有一个reduxsaga中间件来促进异步存储操作,所有API调用都是通过sagas进行的。现在实现了OAuth2,我想检查我的令牌是否过期,然后在API调用发生之前用刷新令牌刷新它。问题是我无法找到一个解决方案来截取这段传奇故事。MyExpireSet值处于存储状态,应使用它来决定访问令牌是否过期 我想要构建的内容 一个拦截器,将在每个传奇之前运行,允许访问redux状态并触发redux操作。因此,我可以从存储访问expiresAt,将其与当前日期时间进行比较,然后如果令牌已过期,则触发刷新a

我有一个
reduxsaga
中间件来促进异步存储操作,所有API调用都是通过sagas进行的。现在实现了
OAuth2
我想检查我的令牌是否过期,然后在API调用发生之前用刷新令牌刷新它。问题是我无法找到一个解决方案来截取这段传奇故事。My
ExpireSet
值处于存储状态,应使用它来决定访问令牌是否过期

我想要构建的内容

一个拦截器,将在每个传奇之前运行,允许访问redux状态并触发redux操作。因此,我可以从存储访问
expiresAt
,将其与当前日期时间进行比较,然后如果令牌已过期,则触发刷新api以刷新它,然后分派存储操作,然后真正的saga可以使用更新的令牌

目前发现的方法:

  • :这不会暴露redux状态,也不允许在内部执行saga效果,因为它不是生成器(工作者)
  • :已尝试处理此问题,但这不能确保指定为触发的操作派生的工作人员传奇等待此通配符传奇首先执行
  • 使用全局状态存储expiresAt,并将令牌刷新逻辑放入网络层,即过去的传说中:我不相信这一点

  • 感谢您的帮助。此外,如果我对手头的问题思考方向不正确,请告诉我正确的解决方法。可能没有传奇。

    我建议使用单独的生成器功能,它将在后台刷新令牌。该过程如下所示:

  • 令牌是由一些传奇故事产生的,比如说
    login
    。它将调度
    LOGIN\u SUCCESS
    操作以在Redux中存储令牌
  • 另一个传奇,比如说
    refreshToken
    将监听
    LOGIN\u SUCCESS
    操作并启动计时器。当计时器过期时,它将刷新令牌或为saga分派操作,以执行令牌刷新
  • 成功刷新令牌后,
    LOGIN\u SUCCESS
    将被调度,这将使我们进入步骤2
  • 因此,令牌将始终被刷新,并且用户在执行操作时不会经历延迟


    作为附加检查,如果令牌刷新失败,您可以实施私有路由以自动注销用户。

    感谢这种方法,但这将使身份验证成为滑动窗口,因此令牌永远不会过期。我也想做一些不活动的事情。因此,如果用户在特定的时间段内未触摸应用程序,并且令牌过期,则您提议的计时器不应自动刷新该应用程序。但是是的,谢谢你的投入。我有一些想法。将实施并提出答案。