Flask WTF提交表单提示The CSRF session token is missing错误原因是什么?
错误触发原因及修复方案
核心原因:表单提交地址不匹配
你HTML代码中表单的action属性设置为/accounting,但CSRF校验、登录表单验证的逻辑全部写在/login路由下:
- 表单直接提交到
/accounting时,该路由开启了CSRF保护但不会处理登录表单的校验逻辑 - 未登录状态下访问
/accounting如果被flask-login拦截,会直接中断请求返回CSRF校验错误
修复方式
将表单标签修改为以下任意一种即可:
<!-- 方式1:默认提交到当前页面路由 --> <form method="POST"> <!-- 方式2:显式指定提交到登录路由 --> <form action="/login" method="POST">
其他可能触发错误的配置问题
- 重复初始化CSRFProtect:你同时执行了
csrf = CSRFProtect(app)和csrf.init_app(app),属于冗余配置,删除其中一行即可,避免重复初始化导致的校验逻辑异常。 - SECRET_KEY配置冲突:你同时通过
app.config['SECRET_KEY']和app.secret_key两个路径配置密钥,如果两个值不一致会导致会话签名校验失败,CSRF token基于会话生成,签名不匹配就会抛出token缺失的错误,统一使用app.config['SECRET_KEY']一种方式配置即可。 - 会话配置不匹配:如果本地调试使用http协议,但你配置了
SESSION_COOKIE_SECURE = True,会导致会话cookie无法正常写入浏览器,CSRF token校验时无法读取对应会话值,也会触发该错误,本地调试时将该配置改为False即可。
内容的提问来源于stack exchange,提问作者Turtle
相关产品推荐
相关产品推荐

