热门标签:
Q:

Django使用django-axes登录

我用django创建了一个网站。 用户应该能够登录。 登录视图如下所示:

from django.contrib.auth import authenticate, login
from django.contrib.auth.models import User
....
if request.method == 'POST':       
        username = request.POST['username']#get username
        password = request.POST['txtPwd']# and password 
        user = authenticate(username=username, password=password) #checking username and pwd
        if user is not None:
            if user.is_active:
                login(request, user)

但是有了这个"解决方案",我无法处理蛮力攻击。 所以我环顾四周,发现了这个: Django中的限制暴力登录攻击

第一个答案是有帮助的。 我选择了django-axes,因为django-ratelimit只计算调用视图的amout。

但这里是我的问题:当我尝试使用错误的密码登录时,它不计算失败。 (仅在/管理部分)。

我没有找到将我的登录视图"添加"到django-axes的选项。

所以这里是我的问题:

如何配置django-axes来处理登录视图中的失败登录?

编辑: 这是我的设置文件:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'axes',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'axes.middleware.FailedLoginMiddleware'
)

...

AXES_LOCK_OUT_AT_FAILURE = False
AXES_USE_USER_AGENT = True
AXES_COOLOFF_TIME = 1
AXES_LOGIN_FAILURE_LIMIT = 50
原网址
A:

默认情况下django-axes使用django的登录视图*(django.contrib.auth.views.login)。 在中间件中,这个视图用watch_login装饰。

因此,您可以通过两种方式解决您的问题:

  • 使用标准登录视图。 以这种方式django-axes不需要额外的设置。
  • 使用watch_login装饰器装饰您的登录视图。

例如:views.py

from axes.decorators import watch_login
...

@watch_login
def your_custom_login_view(request):
    ...

然后,它将像@Ali Faizan提到的那样在基于类的视图中使用:

@method_decorator(watch_login, name='dispatch')
class your_custom_login_view():
     ...

相似问题