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

Django REST框架下用户关闭浏览器的token处理及已登录跳转实现

问题1:用户未点击登出直接关闭浏览器时的Token处理方案

DRF默认内置的Token是永久有效的,即使用户关闭浏览器,Token依然会存储在后端数据库中,存在泄露后被滥用的风险,标准处理方案如下:

  • 优先改用短时效Access Token + 长时效Refresh Token的机制,可使用djangorestframework-simplejwt库实现,默认Access Token有效期仅数分钟,即使用户未主动登出,短时间内Token就会自动失效,大幅降低安全风险
  • 如果需要继续使用DRF内置Token,可给Token表新增expire_time过期时间字段,每次用户发起请求时校验Token有效期,超过有效期直接删除Token要求用户重新登录;同时可配置定时任务定期清理数据库中已过期的无效Token
  • 前端存储Token时优先选择会话存储(sessionStorage),不要使用localStorage或未设置过期时间的Cookie,会话存储会在浏览器关闭时自动清空,就算后端还保留有效Token,前端也无法读取使用,降低泄露风险
  • 核心敏感操作(比如修改密码、支付、删除数据等)额外增加二次验证逻辑,即使Token被盗用也无法直接执行高风险操作
问题2:已登录用户访问登录页自动跳转仪表盘的实现方案

需要分别改造你现有的模板视图和登录接口,代码修改如下:

模板视图修改

给LoginTemplateClass新增dispatch请求前置判断逻辑,校验用户是否已登录:

from django.shortcuts import redirect

class LoginTemplateClass(TemplateView):
    template_name = 'index.html' 

    def dispatch(self, request, *args, **kwargs):
        # 已登录用户直接跳转到仪表盘,此处dashboard替换为你实际的仪表盘路由名
        if request.user.is_authenticated:
            return redirect('dashboard')
        return super().dispatch(request, *args, **kwargs)

登录接口优化

也可给登录接口新增已登录判断,避免已登录用户重复发起登录请求:

class LoginAPI(viewsets.ModelViewSet):
    serializer_class = LoginSerializer

    def post(self,request):
        # 已登录用户直接返回当前用户的有效Token
        if request.user.is_authenticated:
            token, created = Token.objects.get_or_create(user=request.user)                        
            return Response(token.key,status = 200)
        try:
            serializer = self.serializer_class(data=request.data,context={'request': request})                                           
            if serializer.is_valid():
                user = serializer.validated_data['user']
                token, created = Token.objects.get_or_create(user=user)                        
                return Response(token.key,status = 200)
            return Response(serializer.errors,status = 400)            
        except Exception as e:
            return Response({},status = 500)

如果是前后端完全分离的架构,可额外在前端路由守卫中增加判断,本地存在有效Token时直接拦截登录页访问、跳转到仪表盘即可。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:06:03