Python Flask如何实现用户登录_基于JWT令牌的身份验证机制实现

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多个不同风格的酷炫虚拟头像

相关推荐
Icarus_2 分钟前
什么是向量数据库?
数据库·ai
CTA量化套保4 分钟前
期货实盘委托成交持仓对不上:天勤排查顺序与字段对照
python
hj2862516 分钟前
Linux磁盘存储原理(扇区/Block/Inode)+ 软硬链接 + 日志系统 完整版笔记(含案例+面试题)
服务器·网络·数据库
机汇五金_7 分钟前
从钣金加工到成品装配,弱电箱是如何制造出来的?
网络·python·制造
牛油果子哥q9 分钟前
【Redis分布式高阶篇】Redis分布式锁底层精讲:从裸锁缺陷到Redisson源码级落地,解决超时释放、锁失效、主从漏洞、锁续约难题
数据库·redis·分布式
键盘上的猫头鹰30 分钟前
【Linux 基础教程(四)】文件内容查看、打包压缩与搜索、重定向管道及环境变量
linux·服务器·python
独挽离人34 分钟前
【无标题】
python
网易CodeWave-小码哥1 小时前
AI Coding沙龙杭州站回顾,共探ISV效能利润双增长
数据库·人工智能
天天进步20151 小时前
Python全栈项目--社区问答平台
开发语言·python·django
噜噜噜阿鲁~2 小时前
python学习笔记 | 12.0、错误、调试和测试
笔记·python·学习