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

如何修改Django axes使其后续登录失败不重置冷却倒计时?

Django Axes 固定锁定时长不重置冷却时间配置方案

Django Axes 默认会将冷却计时器重置为最近一次登录失败的发生时间,锁定期间的后续失败尝试会自动延长锁定时长,如需修改为固定锁定时长、不重置冷却时间,可按以下方案操作:

5.0及以上版本(推荐方案)

Axes 5.0版本已内置对应配置开关,直接在项目settings.py中添加以下配置即可:

# 关闭锁定期间失败尝试重置冷却时间的逻辑
AXES_RESET_COOL_OFF_ON_FAILURE_DURING_LOCKOUT = False

该配置生效后,锁定时长会从首次触发锁定的时间点开始计算,锁定期间内所有后续失败尝试都不会延长锁定时间,到期后账户自动解锁。

5.0以下版本兼容方案

低版本Axes没有内置上述配置,需要自定义Handler重写锁定判断逻辑:

  • 在项目中新建自定义Handler文件,例如axes_handlers.py,写入以下代码:
from axes.handlers.proxy import AxesProxyHandler
from django.utils import timezone

class FixedCooloffAxesHandler(AxesProxyHandler):
    def is_locked(self, request, credentials: dict = None) -> bool:
        locked, lockout_until = super().get_lockout_info(request, credentials)
        if not locked:
            return False
        # 固定按首次锁定时间计算冷却时长,到期自动解锁
        if lockout_until <= timezone.now():
            super().reset_attempts(request, credentials)
            return False
        return True
  • 在settings.py中指定使用自定义Handler:
AXES_HANDLER = '你的项目名.axes_handlers.FixedCooloffAxesHandler'

生效验证

修改配置后重启Django服务即可生效,如需测试可以先清空现有锁定记录:
python manage.py axes_reset

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:24:03