Flask构建Rest API遇CSRF令牌缺失错误,求解决方案
Flask REST API 遇CSRF Token缺失错误的修复方法
问题原因
你遇到的「The CSRF token is missing」错误,是因为你的Flask项目中使用了Flask-WTF或其他带CSRF保护的扩展,这类扩展默认会对所有POST请求开启CSRF校验,并非只有WTF表单才会触发——你的API路由也被纳入了校验范围。
修复方案
1. 单个路由关闭CSRF校验
如果仅需给这一个API路由跳过校验,使用csrf.exempt装饰器即可:
from flask_wtf.csrf import csrf_exempt @api.route('/posts/add/post', methods=['POST']) @csrf_exempt # 添加这个装饰器 def add_post(): subject = request.json['subject'] body = request.json['body'] myPost = Post(subject=subject, body=body, category_id=1) db.session.add(myPost) db.session.commit() return post_schema.jsonify(myPost).data
2. 整个API蓝图全局禁用CSRF
如果你的api是一个蓝图,可以直接给整个蓝图排除CSRF校验:
from flask_wtf.csrf import CSRFProtect # 初始化CSRF保护 csrf = CSRFProtect(app) # 给api蓝图禁用CSRF校验 csrf.exempt(api)
3. 全局配置排除API路径前缀
如果有多个API路由需要跳过校验,可在项目配置中指定无需校验的路径前缀:
# 所有以/api/v1/开头的路由都跳过CSRF校验 app.config['WTF_CSRF_EXEMPT_ROUTES'] = ['/api/v1/']
注意:如果你的项目使用的是其他带CSRF保护的扩展(如Flask-Security),逻辑类似,找到对应扩展的CSRF禁用方法即可。
内容的提问来源于stack exchange,提问作者ussrback
相关产品推荐
相关产品推荐

