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

Flask接口配置token_required后POST请求提示Token缺失怎么解决

问题根因

你实现的token_required装饰器仅通过request.args.get('token')读取URL查询参数中的token,而你是将token放在请求头中传输,代码无法读取到传入的token,因此直接返回Token is missing!错误。

修复方案

1. 更新token_required装饰器逻辑

适配标准的Bearer认证请求头格式,同时可兼容原有的URL参数传参方式,修改后代码如下:

from flask import Flask, request, jsonify
import jwt
from functools import wraps

def token_required(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        token = None
        # 优先从Authorization请求头获取Bearer格式的token
        if 'Authorization' in request.headers:
            auth_val = request.headers.get('Authorization')
            if auth_val.startswith('Bearer '):
                token = auth_val.split(' ')[1]
        # 兜底从URL查询参数获取token
        if not token:
            token = request.args.get('token')

        if not token:
            return jsonify({'message': 'Token is missing!'}), 403
        try:
            # PyJWT 2.x及以上版本必须明确指定解码算法,和你签发token时的算法保持一致即可
            data = jwt.decode(token, app.config['SECRET_KEY'], algorithms=["HS256"])
        except Exception as e:
            return jsonify({'message': 'Token is invalid'}), 403

        return f(*args, **kwargs)
    return decorated

2. 验证Insomnia请求配置

两种传参方式任选其一即可:

  • 选择Bearer Authentication认证类型:直接在Token输入框填入你签发的JWT字符串,不需要额外加Bearer 前缀
  • 手动添加请求头:Header名填写Authorization,Header值填写Bearer 你的JWT字符串,注意Bearer和JWT字符串之间必须有一个英文空格
可选排查手段

如果修改后依然报错,可以在装饰器的token = None行之后加一行打印代码print(request.headers),运行Flask服务后发起请求,查看控制台输出的请求头中是否包含正确的Authorization字段,定位是否是请求端配置问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:57:02