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

Django-Axes部署后多次登录失败不锁定用户问题求助

Django-Axes 服务器环境下无法锁定用户(本地正常、日志正常)排查方案

已知场景:

  • 本地localhost测试时,连续登录失败后能正常触发用户/IP锁定
  • 部署到服务器后,登录失败日志可正常写入数据库,但达到失败次数阈值后未触发锁定
  • 已配置AXES_LOCK_OUT_AT_FAILURE = True,执行过python manage.py migrate和python manage.py check,因MySQL设置USE_TZ = False

以下是针对性排查与解决步骤:

1. 确认Axes中间件顺序

AxesMiddleware必须放在认证和会话中间件之后,如果服务器上的MIDDLEWARE顺序与本地不一致,会导致锁机制失效。正确顺序示例:

MIDDLEWARE = [
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # AxesMiddleware 必须位于此处之后
    'axes.middleware.AxesMiddleware',
    # 其他中间件...
]

2. 修复服务器环境下的IP识别问题

服务器通常会配置反向代理(Nginx/Apache),Axes默认获取的是代理服务器IP而非真实客户端IP,导致所有请求被识别为同一IP,无法正确累计失败次数。添加以下配置:

AXES_TRUST_PROXY = True
# 指定优先从代理头获取真实IP
AXES_META_PRECEDENCE_ORDER = [
    'HTTP_X_FORWARDED_FOR',
    'REMOTE_ADDR',
]

3. 验证时间一致性

虽然设置了USE_TZ = False,需确保服务器系统时间与Django的TIME_ZONE配置完全匹配。执行以下命令验证:

python manage.py shell
>>> from django.utils import timezone
>>> print(timezone.now())

对比输出时间与服务器系统时间,若存在偏差,Axes的冷却时间和锁定判断逻辑会失效。

4. 检查缓存配置(关键)

Axes依赖Django缓存跟踪失败次数,服务器多进程部署(如Gunicorn/uWSGI)时,默认的LocMemCache无法跨进程共享数据,导致失败次数无法累计。需切换为分布式缓存,示例Redis配置:

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

5. 确认认证后端顺序

确保AxesStandaloneBackend是AUTHENTICATION_BACKENDS的第一个后端,服务器配置需与本地完全一致,否则Axes的锁定逻辑无法优先执行。

6. 使用真实客户端IP测试

若在服务器本地测试(如curl localhost),Axes识别的是服务器本地IP,可能与过往日志IP混淆。建议从外部客户端发起测试请求,或用工具模拟不同IP的失败登录。

7. 检查锁定范围配置

若需要锁定用户而非仅IP,需确认配置是否与本地一致:

# 可选:锁定用户+IP组合
AXES_LOCK_OUT_BY_COMBINATION_USER_AND_IP = True
# 或单独锁定用户
AXES_LOCK_OUT_BY_USER = True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:20:28