我用 django 创建了一个网站。用户应该能够登录。登录 View 如下所示:
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-ratelimit 只计算调用 View 的次数。
但这是我的问题:当我尝试使用错误的密码登录时,它不算失败。 (仅在/admin 部分)。
我找不到将我的登录 View “添加”到 django-axes 的选项。
所以这是我的问题:
如何配置 django-axes 以处理登录 View 中的失败登录?
编辑: 这是我的设置文件:
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
最佳答案
默认情况下 django-axes
使用 django 的登录 View *(django.contrib.auth.views.login
)。在中间件中,此 View 用 watch_login
装饰。
所以您可以通过两种方式解决您的问题:
- 使用标准登录 View 。这样,
django-axes
就不需要额外的设置了。 - 使用
watch_login
装饰器装饰您的登录 View 。
例如:views.py
from axes.decorators import watch_login
...
@watch_login
def your_custom_login_view(request):
...
然后它将在@Ali Faizan 提到的基于类的 View 中像这样使用:
@method_decorator(watch_login, name='dispatch')
class your_custom_login_view():
...
关于python - 使用 django-axes 登录 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25760023/