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

Flask调用JWT保护接口提示Missing cookie access_token_cookie解决方法

问题根因

该报错来自Flask-JWT-Extended扩展,默认配置下它会优先从cookie中读取access_token_cookie,如果你的项目是前后端分离架构,前端请求没有自动携带cookie、或者跨域配置不支持凭证传递,就会触发这个错误。你在all_tours接口中添加的代码无效,因为set_access_cookies是给响应添加Cookie存储标识,无法解决请求阶段的token读取问题。


可行解决方案

方案1:优先用请求头传token(推荐前后端分离场景使用,完全规避cookie跨域问题)

直接修改Flask-JWT-Extended全局配置,指定仅从请求头的Authorization字段读取token,就不会再校验cookie:

# 在你初始化app的代码中添加以下配置
app.config['JWT_TOKEN_LOCATION'] = ['headers']
app.config['JWT_HEADER_NAME'] = 'Authorization'
app.config['JWT_HEADER_TYPE'] = 'Bearer'

配置完成后前端请求all_tours接口时,只要在请求头中带上Authorization: Bearer <登录接口返回的access_token>即可正常访问。

方案2:如果要保留cookie校验模式,按以下步骤调整

  1. 先补全Flask-JWT-Extended全局配置:
app.config['JWT_TOKEN_LOCATION'] = ['cookies', 'headers'] # 同时支持两种取token方式
app.config['JWT_COOKIE_CSRF_PROTECT'] = False # 开发环境可关闭CSRF校验,生产按需开启
app.config['JWT_ACCESS_COOKIE_NAME'] = 'access_token_cookie'
  1. 修正all_tours接口的跨域配置,允许跨域传递凭证:
@app.route("/admin/all_tours")
@jwt_required()
def all_tours():
    all_tours = Tour.query.filter_by(owner=get_jwt_identity()).all()
    response = jsonify(all_tours=[i.serialize for i in all_tours])
    response.headers.add('Access-Control-Allow-Origin', 'http://localhost:3000')
    # 新增允许凭证的头
    response.headers['Access-Control-Allow-Credentials'] = 'true'
    return response

也可以直接安装flask-cors做全局配置,避免每个接口重复加头:

pip install flask-cors
# app初始化时添加
from flask_cors import CORS
CORS(app, supports_credentials=True, origins=['http://localhost:3000'])
  1. 前端请求必须开启凭证传递配置:
  • axios场景:请求参数添加withCredentials: true
  • fetch场景:请求参数添加credentials: 'include'

内容的提问来源于stack exchange,提问作者Sabina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:24:07