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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:24:19