【发布时间】:2020-09-24 09:38:54
【问题描述】:
好的,伙计们,这是我在这里的第一篇文章,因为我非常绝望,所以我会向你们寻求帮助。
我在 redux-thunk 中遇到了异步请求问题。
看:
我有 react-redux-jwt 身份验证,并且我在每个请求上都将旧令牌列入黑名单,并且使用快速中间件,我正在为请求用户发送一个新令牌。当用户使用过期令牌之一(在数据库中标记)询问服务器时,BOOM -> 401。但是一切都很好,当我的调度看起来像这样时:
// imports
class Components extends React.Component {
// ...rest
firstTrigger(data) {
const {dispatch} = this.props;
dispatch(anyActions.firstAction(data));
}
secondTrigger(data) {
const {dispatch} = this.props;
dispatch(anyOtherActions.secondAction(data));
}
render() {
return <div >
// ... rest
<button onClick={this.firstTrigger}> Trigger 1 </button>
<button onClick={this.secondTrigger}> Trigger 2 </button>
</div>;
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
当我必须像这样在某一时刻执行一些操作时,乐趣就开始了:
// imports
class Components extends React.Component {
// ...rest
anyTrigger(data) {
const {dispatch} = this.props;
dispatch(anyActions.firstAction(data));
dispatch(anyOtherActions.secondAction(data));
}
render() {
return <div >
// ... rest
<button onClick={this.anyTrigger}> Trigger two actions </button>
</div>;
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
现在你们大概猜到那里发生了什么。第一个使用自定义 axios 请求(使用令牌 ofc)去服务器的查询,一切都很好,所以它做我想要的,获取一个新令牌并将旧令牌列入黑名单,然后返回一个全新的令牌 然后 第二个动作被派发并使用旧令牌发送(与第一个动作相同),但该令牌已被第一个请求和 BOOM -> 401 列入黑名单。因此我很生气。我几乎尝试了所有方法:自定义队列包、自定义状态的标志、redux 中间件、sagas、中间件级别的缓冲操作...
也许这是一个愚蠢的问题,但我在 PHP 中长大,我不知道如何解决这个问题。也许你有任何其他安全的方式来使用 react-redux 处理 JWT?或者你有一些想法如何暂停请求直到前一个结束?
哦,对不起我的英语,但我认为你应该明白我要说的话。
【问题讨论】:
标签: javascript reactjs redux jwt middleware