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

使用django_cron实现token过期自动登出及Django Cron中获取当前用户信息

核心逻辑澄清

django_cron 是运行在后台的独立定时任务进程,不存在Web请求链路中的「当前登录用户」上下文,你不需要主动获取当前用户,只需要批量遍历所有过期 Token 即可拿到对应用户信息完成登出逻辑。

前置配置:给 Token 添加过期时间字段

DRF 默认的 Token 模型没有过期时间属性,你需要先扩展该模型才能判断 Token 是否过期:

  1. 自定义带过期时间的 Token 模型
# yourapp/models.py
from django.db import models
from rest_framework.authtoken.models import Token as DefaultDRFToken

class ExpiringToken(DefaultDRFToken):
    # 存储Token过期时间
    expires_at = models.DateTimeField()
    
    class Meta:
        db_table = "expiring_authtoken"
  1. 配置 DRF 使用自定义 Token 模型
# settings.py
REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES": [
        "rest_framework.authtoken.authentication.TokenAuthentication",
    ],
    "AUTHTOKEN_MODEL": "yourapp.ExpiringToken"
}
  1. 登录生成 Token 时写入过期时间
    你原有登录逻辑里生成 Token 的部分需要补充expires_at的赋值,比如设置 Token 7天有效期:
from datetime import timedelta
from django.utils import timezone

# 登录接口生成Token的逻辑片段
user = authenticate(username=username, password=password)
if user:
    token, _ = ExpiringToken.objects.get_or_create(user=user)
    # 每次登录刷新有效期
    token.expires_at = timezone.now() + timedelta(days=7)
    token.save()
Django Cron 任务实现

编写定时清理任务,遍历所有过期 Token 即可直接获取关联的用户信息:

# yourapp/cron.py
from django_cron import CronJobBase, Schedule
from django.utils import timezone
from yourapp.models import ExpiringToken

class ExpiredTokenCleanJob(CronJobBase):
    # 定义任务执行频率:每1小时执行一次,可根据需求调整
    RUN_EVERY_MINS = 60
    schedule = Schedule(run_every_mins=RUN_EVERY_MINS)
    # 全局唯一的任务标识
    code = "yourapp.expired_token_clean"
    
    def do(self):
        # 过滤所有已过期的Token
        expired_tokens = ExpiringToken.objects.filter(expires_at__lt=timezone.now())
        for token in expired_tokens:
            # 直接通过token.user获取对应用户的所有信息
            current_user = token.user
            # 执行你原有的登出逻辑:删除旧Token
            token.delete()
            # 其他自定义操作:比如生成新Token、记录登出日志、给用户发通知等,都可以直接用current_user的属性操作

测试定时任务可以直接执行命令:

python manage.py runcrons

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:45:00