如何在django-rest-framework-simplejwt中禁用Refresh Token并移除refresh字段?
如何在django-rest-framework-simplejwt中禁用Refresh Token并移除响应里的refresh字段?
当然没问题!我在项目里刚好处理过类似需求,要实现这个目标,你可以通过以下几个步骤操作:
1. 自定义Token获取逻辑,移除refresh字段
最简单的方式是重写默认的Token获取流程,让响应只返回access token。有两种实现思路:
思路一:修改响应数据(快速实现)
继承默认的TokenObtainPairView,在返回响应前直接删除refresh字段:
from rest_framework_simplejwt.views import TokenObtainPairView class CustomTokenObtainView(TokenObtainPairView): def post(self, request, *args, **kwargs): response = super().post(request, *args, **kwargs) # 移除响应中的refresh字段,用pop避免KeyError response.data.pop('refresh', None) return response
思路二:自定义序列化器(更彻底)
直接在序列化器层面就不生成refresh token,从根源上解决问题:
from rest_framework_simplejwt.serializers import TokenObtainSerializer from rest_framework_simplejwt.tokens import AccessToken from rest_framework_simplejwt.views import TokenObtainPairView class NoRefreshTokenSerializer(TokenObtainSerializer): def get_token(self, user): # 只生成AccessToken,完全跳过RefreshToken的生成逻辑 return AccessToken.for_user(user) class CustomTokenObtainView(TokenObtainPairView): serializer_class = NoRefreshTokenSerializer
2. 更新URL路由,替换默认接口
把项目中原来指向token_obtain_pair的路由,替换成我们自定义的视图,同时移除refresh token相关的路由(比如token_refresh):
from django.urls import path from .views import CustomTokenObtainView urlpatterns = [ # 替换默认的登录获取token接口 path('api/token/', CustomTokenObtainView.as_view(), name='token_obtain'), # 移除这行refresh相关路由:path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), ]
3. 验证效果
现在请求你的登录接口,响应里就只会包含access字段了,而且系统也不会再生成refresh token,彻底禁用了refresh功能。
内容的提问来源于stack exchange,提问作者C.K.
相关产品推荐
相关产品推荐

