nodejs.ForbiddenError: invalid csrf token,egg中post失败解决方案

问题:

前台使用axios发送Post请求,后端使用egg框架接受请求,报错nodejs.ForbiddenError: invalid csrf token。

原因:

egg 框架内置了安全系统,默认开启防止 XSS 攻击 和 CSRF 攻击,每次请求得时候请求头必须携带csrfToken字段。

解决方案:

一:关闭安全策略

在 config.default.js 文件中加入以下代码:

config.security: {
   csrf = {
     enable: false,
   }
}

但是显然这种是及其不提倡的。

二、请求头中携带csrfToken字段

server端:

// config.default.js 

config.security= {
   csrf : {
     headerName: 'x-csrf-token',// 自定义请求头
   }
}

客户端:

const getCookie = (val) => {//获取x-csrf-token字段
  var arr,reg=new RegExp("(^| )"+val+"=([^;]*)(;|$)");
  if(arr=document.cookie.match(reg))
  return unescape(arr[2]);
  else
  return null;
}

// NProgress 配置
NProgress.configure({
  showSpinner: false
});

//http请求拦截
httpNet.interceptors.request.use(function(config) {
  console.log(document.cookie);
  //发送请求之前
  config.headers['Content-Type'] = "application/json";
  config.headers['x-csrf-token'] = getCookie('csrfToken');//请求头设置x-csrf-token字段
  //开启 progress bar
  NProgress.start();

  return config;
},function(err) {
  //请求错误处理
  return Promise.reject(err);
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值