全栈开发技术分享
首页
👉 CSS大揭秘 👈
  • 目录
  • 分类
  • 标签
  • 归档
  • Vue
  • JavaScript
  • 微信开发
  • 移动端H5调试工具
  • 国内十大前端团队网站
  • Nodejs
  • Egg
  • 环境搭建
  • 运维面板
  • 域名配置
  • Nginx
  • 收藏
  • 常用工具
  • 实用技巧
  • 常用命令
  • 友情链接
关于

Dreaming Lee 🍍 ҉҉҉҉҉҉҉҉

开发小菜鸡
首页
👉 CSS大揭秘 👈
  • 目录
  • 分类
  • 标签
  • 归档
  • Vue
  • JavaScript
  • 微信开发
  • 移动端H5调试工具
  • 国内十大前端团队网站
  • Nodejs
  • Egg
  • 环境搭建
  • 运维面板
  • 域名配置
  • Nginx
  • 收藏
  • 常用工具
  • 实用技巧
  • 常用命令
  • 友情链接
关于
  • Nodejs

    • Nodejs学习参考资料
  • Egg

    • 扩展

      • Egg使用egg-redis
      • Egg定时任务
    • 解决方案

      • Egg解决post请求报错invalid csrf token
        • 方案一:关闭csrf
        • 方案二:客户端发送请求时,携带 csrfToken
        • 方案三:设置referer
        • security参考配置
      • Egg接口返回字段名下划线转驼峰
    • 实战

      • Egg定时任务实现企业微信群机器人定时推送
  • Redis

    • Redis基础知识
  • 后台
  • Egg
  • 解决方案
Dreaming Lee 🍍 ҉҉҉҉҉҉҉҉
2021-01-26

Egg解决post请求报错invalid csrf token

# Egg - 解决post请求报错 "invalid csrf token"

# 方案一:关闭csrf

服务端无法接受 post 请求,并且前台报错 403 ,服务端自动返回信息:message: 'invalid csrf token'。egg 框架内置了安全系统,默认开启防止 XSS 攻击 和 CSRF 攻击,可以通过关闭 CSRF 方式解决(不推荐),如下:

// config.default.js
config.security = {
  csrf: {
    enable: false,
  },
}
1
2
3
4
5
6

# 方案二:客户端发送请求时,携带 csrfToken

# server端

// config.default.js
config.security = {
  csrf: {
    headerName: 'x-csrf-token', // 自定义请求头
  },
}
1
2
3
4
5
6

# 客户端

// 封装获取cookie方法
const getCookie = (name) =>{
    let reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
    let arr = document.cookie.match(reg)
    if (arr) {
        return unescape(arr[2])
    } else {
        return null
    }
}
 
// 接口请求头添加csrfToken字段
headers['x-csrf-token'] = getCookie('csrfToken')
1
2
3
4
5
6
7
8
9
10
11
12
13

注意

此方法使用cookie,但貌似最新的chrome浏览器已禁用在iframe中使用cookie,可尝试使用session解决,具体参考:egg-security配置 (opens new window)

# 方案三:设置referer

// config.default.js
config.security = {
  csrf: {
    type: 'referer',
    refererWhiteList: [ '请求接口的域名' ],
  },
}
1
2
3
4
5
6
7

# security参考配置

exports.security = {
  csrf: {
    type: 'ctoken',             // can be ctoken, referer, all or any, default to ctoken
    useSession: false,          // if useSession set to true, the secret will keep in session instead of cookie
    ignoreJSON: false,          // skip check JSON requests if ignoreJSON set to true
    cookieName: 'csrfToken',    // csrf token's cookie name
    sessionName: 'csrfToken',   // csrf token's session name
    headerName: 'x-csrf-token', // request csrf token's name in header
    bodyName: '_csrf',          // request csrf token's name in body
    queryName: '_csrf',         // request csrf token's name in query
    refererWhiteList: [],       // referer white list
  },
}
1
2
3
4
5
6
7
8
9
10
11
12
13
上次更新: 2021-05-10 17:15:54
Egg定时任务
Egg接口返回字段名下划线转驼峰

← Egg定时任务 Egg接口返回字段名下划线转驼峰→

最近更新
01
【uniapp】字节小程序BUG - “navigateToMiniProgram/getUserProfile:fail must be invoked by user tap gesture”
06-21
02
七牛云上传自有证书
04-27
03
使用腾讯云申请免费SSL证书
04-27
更多文章>
Theme by Vdoing | Copyright © 2020-2024 | 豫ICP备2020030395号 | 靳立祥 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式