You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:24:05