首页 > 解决方案 > Flask 表单不会为无效令牌引发 CSRFError

问题描述

Flask-WTF 文档状态:

当 CSRF 验证失败时,它将引发 CSRFError。

但我没有得到例外。

我将 Flask-WTF 用于我的表单,如下所示:

class MyForm(FlaskForm):
    ...

在我的处理程序中,我这样做:

my_form = MyForm()
if my_form.validate_on_submit():
    ...

我希望在内部引发异常,validate_on_submitvalidate_on_submit只是返回 False。

请注意,我没有这样做:

from flask_wtf.csrf import CSRFProtect
csrf = CSRFProtect(app)

因为我的理解是,如果您的表单依赖于FlaskForm.

我究竟做错了什么?

标签: flaskcsrfflask-wtforms

解决方案


在 flask-wtf 存储库中搜索 CSRFError,如果你确实使用它,它似乎是唯一一次实际引发的

from flask_wtf.csrf import CSRFProtect
csrf = CSRFProtect(app)

你提到的模式。它仅由函数调用的_error_responsecsrf.py引发protect。相反,例如,当令牌无效时validate_csrf引发。ValidationError


推荐阅读