在具有redux saga的本地反应中实现令牌刷新

问题描述 投票:2回答:1

我有一个redux-saga中间件来促进异步存储操作,并且所有API调用都是通过sagas进行的。现在实现OAuth2我想检查我的令牌是否已过期,然后在API调用发生之前用刷新令牌刷新它]。问题是我无法找到一种方法来拦截传奇故事。我的expiresAt值处于存储状态,应用于确定访问令牌是否已过期。

我想建造什么

将在每个传奇之前运行的拦截器,它可以访问redux状态并触发redux动作。这样我就可以从商店访问expiresAt并将其与当前日期时间进行比较,然后如果令牌已过期,则触发刷新API对其进行刷新并随后调度商店操作,然后真正的英雄传奇可以使用更新的令牌。

到目前为止找到的方法:

  1. [using effectMiddleWares:由于它不是生成器(工作程序),因此不会公开redux状态,也不允许在内部执行传奇效果。
  2. [Using wild card action:尝试使用此方法,但这不能确保指定要为触发的动作生成的辅助对象等待此通配符传说首先执行]。
  3. 使用全局状态存储expiresAt并将令牌刷新的逻辑放入网络层(即过去的sagas)>:我对此并不感到信服。
  4. 感谢您的帮助。另外,如果我没有正确地考虑眼前的问题,请告诉我正确的解决方法。可能没有传奇。

    我正在使用redux-saga中间件来促进异步存储操作,并且所有API调用都是通过sagas进行的。现在实现OAuth2,我想检查我的令牌是否已过期,然后使用...

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

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

    作为附加检查,您可以实施专用路由,以防令牌刷新失败而自动注销用户。

    javascript react-native oauth-2.0 react-redux redux-saga
    1个回答
    0
    投票

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

    1. 令牌是由一些传奇故事产生的,例如login。它将分派LOGIN_SUCCESS操作将令牌存储在Redux中。
    © www.soinside.com 2019 - 2024. All rights reserved.