如何修改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
相关产品推荐
相关产品推荐

