Django-rest-auth如何实现每次登录时刷新生成新Token
Django-rest-auth 实现每次登录生成新Token配置方案
Django-rest-auth 默认对接DRF原生TokenAuthentication认证体系,该体系下单个用户会绑定唯一固定Token,注册后首次生成的Token不会随登录操作变更,存在Token泄露后可长期冒用的安全风险,可通过以下步骤实现每次登录刷新Token:
- 第一步:编写自定义登录视图,重写Token生成逻辑
在你存放认证相关逻辑的app下的views.py中新增如下代码,逻辑为每次触发登录请求时,先删除该用户名下已存在的所有旧Token,再生成全新Token返回:
from rest_auth.views import LoginView from rest_framework.authtoken.models import Token class CustomLoginView(LoginView): def get_response(self): # 清除用户历史有效Token Token.objects.filter(user=self.user).delete() # 生成全新Token self.token = Token.objects.create(user=self.user) return super().get_response()
- 第二步:覆盖默认登录路由
修改项目根路由配置urls.py,将自定义登录视图的路由放在rest-auth默认路由引入之前,确保请求优先命中自定义逻辑:
from django.urls import path, include # 替换成你自己的视图导入路径 from accounts.views import CustomLoginView urlpatterns = [ path('rest-auth/login/', CustomLoginView.as_view(), name='custom_rest_login'), path('rest-auth/', include('rest_auth.urls')), ]
- 可选安全增强配置
- 若需要Token自动过期能力,原生DRF Token本身不支持过期机制,可替换为django-rest-knox或SimpleJWT作为认证后端,二者原生支持Token过期、单设备多Token管控等能力,安全性更高。
- 同步修改退出登录逻辑,用户主动退出时直接删除当前持有Token,避免退出后Token仍可访问接口。
配置完成后需验证:使用同一账号多次登录,对比每次返回的Token值是否不同;使用旧Token请求需要认证的接口,确认返回401未授权状态,即为配置生效。
内容的提问来源于stack exchange,提问作者Kundoso
相关产品推荐
相关产品推荐

