不得不说阿里的egg框架做的还是相当不错的,自带安全验证。
问题: get请求正常,post请求后台就会报这样的错误。
"nodejs.ForbiddenError: invalid csrf token"
对此问题官方有说明 点击跳转egg官方安全说明 这里不做过多解释
方法一:在confit.default.js新增以下代码,表示关闭安全验证(不推荐)
config.security = {
csrf: {
enable: false,
},
};
方法二: 在前端初始化界面的时候,让前端先get请求一个接口,后台返回一个秘钥给前端,让前端在post请求的时候放在headers请求头里,egg会自动去验证这个秘钥,验证成功才会成功请求。
1、egg后台代码,get接口返回秘钥:
async index() {
const { ctx } = this;
ctx.body = {
csrf:ctx.csrf
};
}
以下演示两种方式,postman测试如下,同时如果在前端请求的话,cookies里面会生成一个秘钥对,如下图,每次请求后秘钥都会变的,所以在前端获取到csrf要以全局的方式放在headers请求头里。
2、前端带上秘钥请求:
axios.post('apis/add', data,{headers:{'x-csrf-token': headData}})
postman测试如下,直接复制csrf