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

Flask配置CSRF表单防护时报错缺少csrf session token如何解决

问题原因及修复方案

  • 缺少必填的SECRET_KEY配置
    Flask-WTF的CSRF防护依赖应用的SECRET_KEY生成和校验token,未配置时token校验会直接失败,这是最常见的触发原因。
  • 手动传递csrf_token的逻辑冗余且易出错
    CSRFProtect初始化后会自动将csrf_token()方法注入到所有模板的上下文中,不需要手动调用generate_csrf()生成token再传入模板,手动生成的token容易和session中存储的校验值不匹配。
  • 表单输入项缺少name属性(非CSRF错误直接原因,但会影响表单正常提交)
    你代码里的姓名输入框未添加name属性,提交时不会被包含在表单数据中。

修正后的代码示例

后端代码

from flask import Flask, render_template, request
from flask_wtf.csrf import CSRFProtect

app = Flask(__name__)
# 必须配置SECRET_KEY,*生产环境建议从环境变量读取,不要硬编码到代码中*
app.config['SECRET_KEY'] = '替换为你自己的随机安全字符串'
csrf = CSRFProtect(app)

@app.route("/reserve", methods=["GET", "POST"])
def reserve():
    if request.method == "GET":
        # 不需要手动传递csrf_token参数
        return render_template("reserve.html")
    # 此处补充POST请求的业务逻辑
    return "表单提交成功"

模板代码(reserve.html)

<form id="Reserve" action="/reserve" method="post">
    <!-- 直接使用模板上下文中注入的csrf_token()方法即可 -->
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
    <input type="text" name="username" placeholder="Name">
    <button type="submit">
        Submit
    </button>
</form>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:39:03