PyJWT Subject must be a string

今天clone一个python项目,作为新手来学习,结果跑起来一直报错,报错内容如下:

复制代码
127.0.0.1 - - [22/Mar/2025 09:32:03] "GET /static/component/pear/module/extends/popup.js?v=4.0.0 HTTP/1.1" 304 -
127.0.0.1 - - [22/Mar/2025 09:32:03] "GET /api/v1/user/profile HTTP/1.1" 403 -
127.0.0.1 - - [22/Mar/2025 09:32:03] "GET /static/config/pear.config.json HTTP/1.1" 304 -
127.0.0.1 - - [22/Mar/2025 09:32:03] "GET /api/v1/menu?fresh=0.9533041415950494 HTTP/1.1" 403 -
127.0.0.1 - - [22/Mar/2025 09:32:03] "GET /view/analysis/index.html HTTP/1.1" 200 -
127.0.0.1 - - [22/Mar/2025 09:32:03] "GET /static/admin/images/logo.png HTTP/1.1" 304 -
127.0.0.1 - - [22/Mar/2025 09:32:03] "GET /static/admin/images/avatar.jpg HTTP/1.1" 304 -
127.0.0.1 - - [22/Mar/2025 09:32:03] "GET /static/admin/css/other/analysis.css HTTP/1.1" 304 -

日志什么都没有打印,就提示user/profile接口403错误,于是研究这个接口,接口内容如下,而且打断点无反应,说明还没到断点就出现了

python 复制代码
@user_api.get("/user/profile")
@jwt_required()
def user_profile():
    return {
        "code": 0,
        "msg": "获取个人数据成功",
        "data": current_user.json(),
    }

由于在浏览器上看不见返回信息,然后我换postman,这个可以看见报错内容{"msg": "Subject must be a string"},拿着Subject must be a string的错误,通过AI的帮助,找到了问题所在,那就是@jwt_required()有问题

意思就是:jwt中有一个sub字段必须是字符串,于是给jwt解密,果不其然,找到问题!!

分析代码,可以看见,在绑定user_identity_loader的时候,使用的是id,目前我这个id是数字,所以不对,我直接转成字符串,就解决问题。

python 复制代码
@jwt.user_identity_loader
def user_identity_lookup(user):
    return user.id
    # return str(user.id) 正确代码


@jwt.user_lookup_loader
def user_lookup_callback(_jwt_header, jwt_data):
    identity = jwt_data["sub"]
    return UserORM.query.filter(UserORM.id == identity).one_or_none()

虽然转成字符串就可以解决我的问题,这也不能算是代码错误,还是跟业务有关,记录一下分析问题的过程吧!!!最后我这个PyJWT版本2.10.1

①pyjwt版本问题,可能之前是支持数字的,然后我的版本较,淘汰了那种写法。

②可能是切换数据库导致的,比如之前是mongodb,生成的id就是字符串。

③之前的数据库id是手动控制的,现在被我改成自增。

相关推荐
ERROR_LESS7 小时前
【ADS-1】【python基础-2】基本语法与数据结构(列表、字典、集合)
python
Camel卡蒙7 小时前
数据结构——二叉搜索树Binary Search Tree(介绍、Java实现增删查改、中序遍历等)
java·开发语言·数据结构
2401_841495647 小时前
【数据结构】基于Floyd算法的最短路径求解
java·数据结构·c++·python·算法··floyd
Algebraaaaa7 小时前
什么是前端、后端与全栈开发,Qt属于什么?
开发语言·前端·qt
立志成为大牛的小牛7 小时前
数据结构——二十三、并查集的终极优化(王道408)
开发语言·数据结构·笔记·学习·程序人生·考研
一晌小贪欢7 小时前
Python爬虫第6课:Selenium自动化浏览器与动态内容抓取
爬虫·python·selenium·网络爬虫·python基础·python3·pathon爬虫
番石榴AI8 小时前
自己动手做一款ChatExcel数据分析系统,智能分析 Excel 数据
人工智能·python·数据挖掘·excel
纵有疾風起8 小时前
C++模版:模板初阶及STL简介
开发语言·c++·经验分享·开源
QT 小鲜肉8 小时前
【个人成长笔记】Qt Creator快捷键终极指南:从入门到精通
开发语言·c++·笔记·qt·学习·学习方法
星期天要睡觉8 小时前
深度学习——循环神经网络(RNN)
人工智能·python·rnn·深度学习·神经网络