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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:31:06