SimpleJWT每次调用TokenObtainPairView返回不同令牌是否为默认行为?
Django JWT 令牌生成问题解答
1. 每次调用返回不同令牌是否是默认行为?
是的,这是django-rest-framework-simplejwt的默认行为。默认配置下,每次调用TokenObtainPairView接口,都会生成全新的access和refresh令牌,无论之前的令牌是否处于有效期内。框架不会复用或保留之前生成的令牌,因为它默认采用无状态的JWT实现,令牌的验证完全依赖自身携带的签名和过期信息,无需后端存储令牌数据。
2. 能否在令牌未过期时获取之前的令牌?
默认情况下做不到。因为simplejwt没有持久化存储已生成的令牌,无法追踪用户当前有效的旧令牌。如果需要实现这个需求,你需要自行扩展逻辑,大致步骤如下:
- 在用户模型中添加字段,用于存储当前有效的access令牌、refresh令牌以及对应的过期时间
- 自定义
TokenObtainPairView,重写其post方法:在生成新令牌前,先检查用户是否存在未过期的令牌记录,如果有则直接返回该旧令牌;如果没有或已过期,再生成新令牌并更新用户模型中的记录 - 额外处理令牌失效场景:比如用户修改密码、主动登出时,需要清空用户模型中存储的令牌记录,确保旧令牌无法再被返回
内容的提问来源于stack exchange,提问作者BillTheKid
相关产品推荐
相关产品推荐

