首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django登录django-axes

Django登录django-axes
EN

Stack Overflow用户
提问于 2014-09-10 07:50:18
回答 2查看 4.1K关注 0票数 8

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

代码语言:javascript
复制
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)

但有了这个“解决方案”,我无法应付野蛮的武力攻击。所以我环顾四周发现了这个:Throttling brute force login attacks in Django

第一个答案很有帮助。我选择django-axes,因为django-速率消除只计算调用视图的数量。

但我的问题是:当我试图用错误的密码登录时,它不会计算失败。(仅在/admin部分)。

我发现没有选择“添加”我的登录视图到django-axes。

所以我的问题是:

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

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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-11 07:41:12

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

所以你可以用两种方式解决你的问题:

  • 使用标准登录视图。这样,django-axes就不需要额外的设置。
  • watch_login装饰器装饰您的登录视图。

例如:views.py

代码语言:javascript
复制
from axes.decorators import watch_login
...

@watch_login
def your_custom_login_view(request):
    ...

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

代码语言:javascript
复制
@method_decorator(watch_login, name='dispatch')
class your_custom_login_view():
     ...
票数 10
EN

Stack Overflow用户

发布于 2022-05-24 06:38:51

在新版本中,您可以使用@axes_dispatch而不是@watch_login

代码语言:javascript
复制
from axes.decorators import axes_dispatch

@axes_dispatch
def custom_login_view(request):
   # .....some code......
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25760023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档