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

Flask-WTF出现“CSRF会话令牌缺失”错误的问题求助

Flask CSRF令牌验证失败解决办法

问题根源

Flask-WTF的CSRF保护有两个核心要求,没满足就会触发「The CSRF session token is missing」错误:

  • CSRF令牌和后端会话绑定,请求必须携带会话Cookie(generate_csrf()生成的令牌会存在会话里,没Cookie后端找不到对应会话)
  • 默认只识别X-CSRFToken这个请求头,用别的头名后端读不到令牌

具体修复步骤

1. 确保请求带会话Cookie

用Postman请求/login时,必须带上之前请求/api/csrf_token时返回的会话Cookie。Postman默认会自动保存并携带Cookie,你可以在请求的「Cookies」面板里确认是否包含Flask的会话Cookie(默认名为session)。

2. 改用正确的请求头

把Postman里的请求头改成X-CSRFToken,值填获取到的CSRF令牌。Flask-WTF默认监听这个头,换别的名字就会识别失败。

3. 可选:自定义CSRF头名(如果有特殊需求)

要是必须用自定义头,在Flask配置里加一行:

app.config['WTF_CSRF_HEADERS'] = ['X-Your-Custom-Header-Name']

但尽量用默认的X-CSRFToken,省得额外配置。

4. 代码优化(可选)

可以把get_csrf_token接口改成同时把令牌写到Cookie里,前端也能直接从Cookie读,不用单独存返回值:

@app.route('/api/csrf_token', methods=['GET'])
@csrf.exempt
def get_csrf_token():
    csrf_token = generate_csrf()
    resp = jsonify({'csrf_token': csrf_token})
    resp.set_cookie('csrf_token', csrf_token, httponly=False)  # 设为False让前端能读取
    return resp

测试流程

  1. 先GET请求/api/csrf_token,拿到令牌并确认Cookie已生成
  2. Postman开启Cookie自动携带,设置X-CSRFToken头为令牌值
  3. 发送POST请求到/login,错误应该就消失了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:07:05