You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vuex+Axios登录场景下输入错误账号密码时如何向用户展示错误提示

登录401状态不进入catch块解决方案

axios默认仅当HTTP状态码处于2xx区间时才会进入catch分支,出现401报错却走到then分支的问题,基本由以下两类配置错误导致,对应解决方法如下:

  • 配置问题1:axiosIns实例自定义了validateStatus规则,将401纳入了成功状态范围
    找到axiosIns的定义位置,检查validateStatus配置项,确保规则仅放行2xx状态码即可,参考配置:

    const axiosIns = axios.create({
      baseURL: '/你的接口前缀',
      // 保留默认校验规则即可,不要额外添加401的放行逻辑
      validateStatus: (status) => status >= 200 && status < 300
    })
    
  • 配置问题2:axiosIns的响应拦截器吃掉了401错误,未抛出到业务层
    检查你给axiosIns添加的响应拦截器,错误回调分支必须返回Promise.reject(error)才能把错误传递到业务代码的catch块,参考配置:

    axiosIns.interceptors.response.use(
      (response) => response,
      (error) => {
        // 如果你需要全局处理401逻辑可以在这里添加,比如清空token跳转登录页
        if (error.response?.status === 401) {
          // 全局401处理逻辑
        }
        // 必须保留这行,否则错误会被拦截器吞掉,不会进入业务catch
        return Promise.reject(error)
      }
    )
    

你可以先在当前的then回调第一行添加console.log(res.status)验证,如果输出为401,即可确认是上述两类配置问题。

现有代码优化建议

你当前LOGIN方法catch分支的throw error可以删除,已经调用reject(error)的情况下不需要重复抛出错误,外层调用action时按如下方式编写即可展示错误提示:

// 组件内调用登录action示例
this.$store.dispatch('LOGIN', 登录表单数据)
  .then(() => {
    // 登录成功跳转逻辑
  })
  .catch(() => {
    // 直接读取vuex中存储的错误信息展示给用户即可
    this.$message.error(this.$store.state.error)
  })

内容的提问来源于stack exchange,提问作者Kawthar Klayshe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:36:04