FlaskWTF中@csrf.exempt失效,抛出CSRF token缺失异常求助
解决Flask Stripe Webhook的CSRF Token缺失错误
你已经给路由添加了@csrf.exempt但依然触发WTForms的CSRF验证错误,可从以下几个方向排查解决:
检查装饰器顺序
Flask装饰器的执行顺序是从下到上(紧贴函数的先生效),务必确保@csrf.exempt放在@app.route之后,直接紧邻函数定义:@app.route("/success", methods=["POST"]) @csrf.exempt def payment_success_webhook(): # 你的webhook处理逻辑若顺序颠倒,
@csrf.exempt可能无法正确作用于目标路由。确认CSRF保护的全局配置
如果你使用Flask-WTF的CSRFProtect扩展,检查是否是从实例化的csrf对象导入豁免装饰器,而非全局导入:# 从你的应用模块导入实例化后的csrf from your_app import csrf @app.route("/success", methods=["POST"]) @csrf.exempt def payment_success_webhook(): # 你的webhook处理逻辑部分Flask-WTF版本更新后,全局的
@csrf.exempt可能无法覆盖实例化的CSRF保护规则。排查其他CSRF相关扩展
若应用还使用了Flask-Security等自带CSRF保护的扩展,这类扩展可能有独立的验证规则,需要给该路由添加对应扩展的豁免装饰器(比如Flask-Security的@security.exempt)。手动在路由内跳过验证
如果以上方法都无效,可尝试在路由函数内部手动标记CSRF验证已通过:from flask import g @app.route("/success", methods=["POST"]) def payment_success_webhook(): # 手动跳过CSRF验证 g.csrf_valid = True # 你的Stripe webhook处理逻辑
注意:Stripe的webhook请求不会携带前端生成的CSRF token,因此该路由必须完全豁免CSRF检查,无需尝试为Stripe请求添加CSRF token。
内容的提问来源于stack exchange,提问作者Abhilash Hazarika
相关产品推荐
相关产品推荐

