当前位置: 首页 > news >正文

Ruoyi框架使用过程碰到的问题——请求地址‘/***/***‘,认证失败‘未能读取到有效Token‘,无法访问系统资源

问题:本人使用Ruoyi框架表单构建器自动生成的Vue表单文件,使用el-upload的自动上传或者this.$refs['upload'].submit()函数都报错认证失败'未能读取到有效Token',无法访问系统资源

了解本框架的或多或少了解其axios请求统一抽取到utils/require.js中,其中请求拦截器中就设置了token值,而el-upload自动上传文件函数猜测并未携带token,估计问题就出在这!

service.interceptors.request.use(config => {
  // 是否需要设置 token
  const isToken = (config.headers || {}).isToken === false
  //此处以下为重点
    //headers中的content-type 默认的大多数情况是  application/json,就是json序列化的格式
    config.headers['Content-Type'] = 'application/json'
    //为了判断是否为formdata格式,增加了一个变量为type,如果type存在,而且是form的话,则代表是formData的格式
    if (config.type && config.type === 'form') {
      config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
      //data是接收的数据,接收的数据需要通过qs编码才可以直接使用
      if (config.data) {
        config.data = qs.stringify(config.data)
      }
    }
  // 是否需要防止数据重复提交
  const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
  if (getToken() && !isToken) {
    config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
  }
  // get请求映射params参数
  if (config.method === 'get' && config.params) {
    let url = config.url + '?' + tansParams(config.params);
    url = url.slice(0, -1);
    config.params = {};
    config.url = url;
  }
  if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
    const requestObj = {
      url: config.url,
      data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
      time: new Date().getTime()
    }
    const sessionObj = cache.session.getJSON('sessionObj')
    if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
      cache.session.setJSON('sessionObj', requestObj)
    } else {
      const s_url = sessionObj.url;                  // 请求地址
      const s_data = sessionObj.data;                // 请求数据
      const s_time = sessionObj.time;                // 请求时间
      const interval = 1000;                         // 间隔时间(ms),小于此时间视为重复提交
      if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
        const message = '数据正在处理,请勿重复提交';
        console.warn(`[${s_url}]: ` + message)
        return Promise.reject(new Error(message))
      } else {
        cache.session.setJSON('sessionObj', requestObj)
      }
    }
  }
  return config
}, error => {
    console.log(error)
    Promise.reject(error)
})

 

相关文章:

  • 如何在群晖NAS中开启FTP服务并实现公网环境访问内网服务
  • Android fragment 转场动画
  • 小程序怎么开发?怎么开发自己的小程序
  • DataGrip2023配置连接Mssqlserver、Mysql、Oracle若干问题解决方案
  • 八、ChatGPT能替代什么人?
  • dolphinscheduler集群部署教程
  • 解决鸿蒙模拟器卡顿的问题
  • MySQL知识点归纳总结(一)
  • 蓝桥杯备战刷题one(自用)
  • CSS——PostCSS简介
  • 阿里云2024年服务器2核4G配置评测_CPU内存带宽_优惠价格
  • 在 Ubuntu 中, 使用 fsck 命令来修复磁盘文件系统
  • npm install常见错误的完整指南
  • Unity Meta XR SDK 快捷配置开发工具【Building Block/Quick Action/OVRCameraRigInteraction】
  • oracle DG 原理
  • 关于静态应用程序安全测试(SAST)的自动修复(AutoFix)
  • 大语言模型LLM推理加速:LangChain与ChatGLM3-6B的推理加速技术(LLM系列11)
  • Android 14 AAOS audio
  • Delphi 报错 Type androidx.collection.ArraySet is defined multiple times
  • 在Pycharm中运行Django项目如何指定运行的端口
  • 清华姚班,正走出一支军团
  • 文旅部副部长饶权出任国家文物局局长
  • 建投读书会·东西汇流|全球物品:跨文化交流视域下的明清外销瓷
  • 单位被裁定补缴12年社保,滞纳金该谁出?
  • 夜读丨囿于厨房与爱
  • 刘非任中共浙江省委常委、杭州市委书记