Flask中用PyJWT生成和验证JWT需四步:安装PyJWT、设保密密钥、签发时设exp过期时间、验证时用try/except捕获异常;Header提取须校验Bearer前缀;解码后查DB获取用户最新数据,不可仅依赖token内字段。Flask 中用 PyJWT 生成和验证 JWT 令牌的关键步骤JWT 不是 Flask 自带功能,得靠 PyJWT 库手动签发和校验。不装包、不设密钥、不处理过期,令牌就形同虚设。pip install PyJWT 是前提,漏掉会报 ModuleNotFoundError: No module named 'jwt'密钥必须保密且固定,建议从环境变量读:SECRET_KEY = os.environ.get('JWT_SECRET', 'dev-secret');硬编码在代码里等于把锁芯贴在门上签发时务必设 exp(单位秒),否则令牌永不过期:jwt.encode({'user_id': 123, 'exp': datetime.utcnow() + timedelta(hours=1)}, SECRET_KEY, algorithm='HS256')验证失败时 jwt.decode() 会抛异常,不是返回 None ------ 必须用 try/except 捕获 InvalidTokenError、ExpiredSignatureError 等如何在 Flask 路由中安全提取并验证 Authorization Header 中的 JWT前端通常把令牌放在 Authorization: Bearer <token> 里,但很多人直接切字符串、忽略大小写、不检查格式,结果被绕过验证。Header 值为空或格式不对时,request.headers.get('Authorization') 返回 None 或字符串,需先判断是否存在,再用 .split() 拆分,且要校验前缀是否为 'Bearer'(注意大小写)别用 str.split(' ')[1] 这种写法------如果 header 是 "bearer xxx" 或 "Bearer" 后没空格,就崩了;稳妥写法是 auth_header.split(maxsplit=1) + 长度判断解码后应校验关键字段,比如确认 user_id 存在且为整数,避免伪造 payload 导致越权不要在验证通过前就查数据库------先解码、验签名、验时间,全通过再查用户,否则攻击者可高频触发 DB 查询为什么不能把 JWT 存在 Cookie 里还设 HttpOnly=False设成 False 就等于把令牌暴露给前端 JS,XSS 一打一个准,和明文传密码没区别。若必须用 Cookie(比如想自动携带、防 CSRF),则务必设 HttpOnly=True、Secure=True(HTTPS 环境下)、Samesite='Lax'但这样 JS 拿不到 token,前端就无法在请求头里手动加 Authorization ------ 得改用 Cookie 方式传,后端用 request.cookies.get('access_token') 提取更常见也更可控的做法:登录成功后,后端只返回 token 字符串,前端存 localStorage 或内存变量,每次请求手动塞进 Authorization 头;缺点是需自行处理 XSS 风险,优点是逻辑清晰、调试方便Flask-SQLAlchemy 用户查询与 JWT payload 的耦合点在哪JWT 里通常只存 user_id,但业务逻辑常需要用户名、角色、邮箱等信息------这些不能全塞进 token,否则改个昵称就得重发令牌。 ARTi.PiCS ARTi.PiCS是一款由AI驱动的虚拟头像生产器,可以生成200多个不同风格的酷炫虚拟头像
相关推荐
u0109147602 小时前
CSS代码复用性太低怎么办_通过BEM结构提升组件模块化qq_424098562 小时前
golang如何使用BubbleTea开发终端UI_golang BubbleTea终端UI开发攻略u0109147602 小时前
C#怎么使用TopLevel顶级语句 C#顶级语句怎么写如何省略Main方法简化控制台程序【语法】独隅2 小时前
PyTorch转TFLite动态形状处理技巧Shorasul2 小时前
Go语言goroutine调度原理_Go语言GMP调度模型教程【高效】Absurd5872 小时前
Navicat导出JSON数据为空如何解决_过滤条件与权限排查最好的期待,未来可期2 小时前
MySQL语法的高级用法CASE WHENm0_716430072 小时前
SQL如何高效统计分类下的多项指标_善用CASE WHEN与SUM聚合m0_588758482 小时前
PHP源码运行受主板供电影响吗_供电相数重要性说明【技巧】