如何在全球范围内以最佳方式处理来自服务器的 401/403 响应

Posted

技术标签:

【中文标题】如何在全球范围内以最佳方式处理来自服务器的 401/403 响应【英文标题】:How to handle 401/403 responses from server optimally on global level 【发布时间】:2018-05-05 18:46:19 【问题描述】:

目前,我正在使用辅助函数和 if 条件,只要有来自 api 的 401(unauth) 或 403(forbidden) 响应,就会将当前位置推送到 /login,如下所示:

request.get(//api url here)
        .set('Accept', 'application/json')
        .set('Authorization', token)
        .then(res => if (res.status_code === 401 || res.status_code === 403) 
           helper.redirectToLogin() // pushes the current page to login page
           else
              dispatch(type: "FETCHED_DATA"))

问题:

我正在使用这个辅助函数来处理所有具有多个 api 调用的操作文件(大约 20 个)中的任何 401/403 响应。 那么,有没有办法在全局范围内处理此类响应,这样我就不必在每个 api 调用(可能是 api 中间件或类似的东西)中放置 if 条件和辅助函数?

【问题讨论】:

创建一个代表您调用它的函数是否是可接受的结果? 是的,只要我不必将条件检查和辅助函数调用放在每个 api 调用中或仅在全局级别。 正如@Shadow 建议的那样,您可以为所有必需的 HTTP 方法创建一个包装器,如果状态不是 200(或其他所需的),则拒绝该承诺。然后在使用它时使用 catch 块根据需要重定向。 能提供一些代码就更好了,谢谢。 @gnmani 我也有同样的担忧。如果你能提供一些代码会很有帮助 【参考方案1】:

我们有 Axios 请求和响应拦截器。检查响应拦截器文档。他们有很好的定义。

https://axios-http.com/docs/interceptors

【讨论】:

以上是关于如何在全球范围内以最佳方式处理来自服务器的 401/403 响应的主要内容,如果未能解决你的问题,请参考以下文章

企业出海,从启用Azure CDN全球加速开始

React Router 4 如何在函数内以编程方式重定向? [复制]

处理来自前端的 API 调用的最佳方式

防止全球范围的污染

如何在给定的分钟内以编程方式更新圆形百分比指示器的进度颜色?

如何在 IntegrationTest 范围内配置 FlyWay