【发布时间】:2020-05-26 14:32:01
【问题描述】:
我有一个redux-saga 中间件来促进异步存储操作,并且所有 API 调用都是通过 sagas 进行的。现在实现OAuth2,我想检查我的令牌是否已过期,然后在 API 调用发生之前用刷新令牌刷新它。问题是我无法找到拦截传奇的解决方案来做到这一点。我的 expiresAt 值处于存储状态,应用于决定访问令牌是否已过期。
我想要构建什么
在每个 saga 之前运行的拦截器,允许访问 redux 状态并触发 redux 操作。这样我就可以从 store 访问 expiresAt 以将其与当前日期时间进行比较,然后如果令牌过期,则触发 refresh api 以刷新它并随后调度 store 操作,然后真正的 saga 可以使用更新的令牌。
目前发现的方法:
- using effectMiddleWares:这不会暴露 redux 状态,也不会允许在内部执行 saga 效果,因为它不是生成器(worker)
- Using wild card action:已经尝试过处理这个问题,但这并不能确保指定为触发操作而生成的工人传奇等待这个通配符传奇首先被执行。
- 使用全局状态来存储 expiresAt 并将令牌刷新的逻辑放在网络层,即过去的 sagas 中:我不相信这一点。
感谢任何帮助。另外,如果我手头的问题没有朝着正确的方向思考,请让我知道正确的方法。可能没有传奇。
【问题讨论】:
标签: javascript react-native oauth-2.0 react-redux redux-saga