如何使用 redux-saga 在 API 响应中检查过期的 JWT 令牌?

Posted

技术标签:

【中文标题】如何使用 redux-saga 在 API 响应中检查过期的 JWT 令牌?【英文标题】:How to go about checking for expired JWT tokens in API response using redux-saga? 【发布时间】:2020-04-04 17:36:49 【问题描述】:

在 React (create-react-app)、Redux 和 Redux-Saga 中测试 API 是否因 JWT 令牌过期而失败的最佳方法是什么?

目前我正在 API 函数中检查响应的状态代码,如下所示(我仅在 1 个地方编写了此测试):

 else if(response.status === 401) 
    return "success" : false, "unauthenticated": true 

在 sagas 中,我通过以下方式对其进行测试:

else if(data.unauthenticated) 
    yield put(type: LOGOUT, message: "You are unauthenticated, Please login again!");

上述方法的问题是,我必须在 API 调用结束时在每个 saga 中编写测试。我在想是否可以只在一个地方执行这个测试,就像第一个代码 sn-p 一样。因为我认为在不同的地方编写相同的测试只会增加样板代码,如果我必须扩展应用程序,这是不好的。

那么,对于我应该如何去做有什么建议吗?

【问题讨论】:

【参考方案1】:

您总是可以为 axios 实例创建一个全局拦截器。

axios.interceptors.response.use(
   (response) => response,
   (error) => 
      if (error.response.status === 401) 
         store.dispatch(
            type: LOGOUT, message: "You are unauthenticated, Please login again!" ,
         );
      
   ,
);

注意:请记住导入您的商店以便能够调用调度。

【讨论】:

你认为我为什么使用 axios? @subham 对于 axios 还有其他好的选择吗? request 也许?你到底在用什么? 我认为 axios 已经成为 React 世界中 API 调用的事实标准 是的,我只使用 axios @subham 然后给你

以上是关于如何使用 redux-saga 在 API 响应中检查过期的 JWT 令牌?的主要内容,如果未能解决你的问题,请参考以下文章

redux-saga api yield 调用有效,但没有返回数据

如何使用 redux-saga 处理异步 API 调用?

如何使用 Redux-Saga 和 Hooks 调用 API

如何防止 redux-saga 调用我的 api 调用两次?

多个 redux-sagas

使用 redux-saga 和 fetch 自动处理 401 响应