Vue-axios拦截器401错误

Posted

技术标签:

【中文标题】Vue-axios拦截器401错误【英文标题】:Vue-axios interceptor 401 error 【发布时间】:2018-04-25 20:11:07 【问题描述】:

由于令牌过期,api 给出 401 Unauthorized 错误。

尽管如此,错误状态码(401) 在 axios 拦截器中不可用。

Vue.axios.interceptors.response.use(function(response)     
  return response;
, function(error) 

    // I want to catch the 401 error here but, error.response is undefined
    return Promise.reject(error);
);

我有什么办法可以得到它,下面的github issue 说 error.response.status 可以使用,但 error.response 对我来说是未定义的

Http 错误: 无法加载http://localhost:5000/api/user:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'http://localhost:2323'。响应的 HTTP 状态代码为 401。

来自拦截器 response.use 的 Console.log(error) 错误:网络错误 在 createError (createError.js:16) 在 XMLHttpRequest.handleError (xhr.js:87)

【问题讨论】:

可以先把错误记录下来吗? @samayo 错误日志已更新。 您在两个不同的端口之间发出请求。这是一个 CORS 问题。您需要允许您的后端接受或添加Access-Control-Allow-Origin 选项 在实际请求之前触发飞行前请求我猜这就是为什么您永远无法拦截错误响应的原因。 @VaisakhRajagopal 你找到方法了吗?我还需要拦截 401,以便我可以重定向到登录屏幕。 【参考方案1】:

这是我的 Axios 错误处理程序代码。它运行。 如果需要,您可以删除 toast 代码。

    import axios from 'axios'
    import toast from './toast'
    import store from '../../store'
    
    // apply interceptor on response
    axios.interceptors.response.use(function (response) 
      if (response.status === 200 && response.data.message) 
        toast.success(response.data.message)
      
      if (response.status === 201 && response.data.message) 
        toast.success(response.data.message)
      
      return response
    , function (error) 
      // Do something with response error
      // check for errorHandle config
    
      // if has response show the error
      if (error.response) 
        if (error.response.status === 404 || error.response.status === 400) 
          toast.error(error.response.data.message)
        
        if (error.response.status === 401) 
          // if you ever get an unauthorized, logout the user
          store.dispatch('logout')
        // you can also redirect to /login if needed !
        
      
      return Promise.reject(error)
    )

【讨论】:

以上是关于Vue-axios拦截器401错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 axios 拦截器时,API 调用循环出现 401 错误

AngularJS 中的 401 未经授权的错误处理

前端401错误 & 解决方法:响应拦截器

AngularJS成功401拦截还是抛出401

401 错误时,几个细节检查

处理 axios react-redux 应用程序中的 401 未授权错误