Django REST Framework中Simple JWT认证的Token验证与过期刷新实现
Django REST Framework Simple JWT Token验证及过期刷新实现
要实现请求时自动校验access token有效性、过期引导刷新的能力,可直接复用Simple JWT提供的原生能力,配合自定义扩展即可,具体配置步骤如下:
核心配置代码
1. serializers.py 自定义Token返回序列化器
如果需要在获取Token的接口返回用户自定义字段(如用户ID、邮箱等),可继承默认的TokenObtainPairSerializer扩展,不需要自定义返回字段可跳过这一步:
class CustomTokenObtainPairSerializer(TokenObtainPairSerializer): def validate(self, attrs): # 默认返回结果(access/refresh tokens) data = super(CustomTokenObtainPairSerializer, self).validate(attrs) # 自定义添加返回数据 data.update({'email': self.user.email}) data.update({'id': self.user.id}) data.update({'status':"success"}) # 可继续添加其他需要返回的响应内容 return data
2. views.py 自定义Token获取视图
替换默认的Token获取视图的序列化器为上面自定义的序列化器:
class CustomTokenObtainPairView(TokenObtainPairView): # 替换为自定义序列化器 serializer_class = CustomTokenObtainPairSerializer
3. urls.py 配置Token相关接口
Simple JWT原生提供了Token刷新、Token校验接口,直接注册到路由即可:
from rest_framework_simplejwt.views import TokenRefreshView, TokenVerifyView urlpatterns = [ path('token/', views.CustomTokenObtainPairView.as_view(), name='token_obtain_pair'), path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), path('token/verify/', TokenVerifyView.as_view(), name='token_verify'), ] urlpatterns = format_suffix_patterns(urlpatterns)
校验逻辑说明
- 需要校验登录态的接口直接配置
rest_framework_simplejwt.authentication.JWTAuthentication作为认证类即可,框架会自动校验请求头中携带的access token有效性 - 若access token已过期,接口会返回401状态码,错误码为
token_not_valid,前端收到该响应后可携带本地存储的refresh token调用/token/refresh/接口获取新的access token,无需用户重新登录 - 若refresh token也已过期,刷新接口同样会返回401状态码,此时再引导用户重新登录即可
内容的提问来源于stack exchange,提问作者Zero0
相关产品推荐
相关产品推荐

