Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Вывод каптчи после нескольких попыток авторизации [RSS Feed]

#1 Сен. 27, 2009 16:36:34

chegivara
От:
Зарегистрирован: 2009-09-27
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод каптчи после нескольких попыток авторизации

Всем привет!

Необходимо выводить рекаптчу после нескольких неудачных попыток аутентификации.

Алгоритм выбрал такой:
Для каждого пользователя хранить в базе счетчик неправильных попыток и сбрасывать его при правильном логине,если счетчик больше 3 то показывать каптчку

Код.
Попытка авторизации:

if request.method == 'POST':
form = AuthForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(username=username, password=password)
Дальше проверка аутентификации:
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
#Redirect to a success page.
return HttpResponseRedirect('/')
else:
# Return a 'disabled account' error message
return render_to_response('login.html', {'form' : form, 'error_login': 1})
else:
Заношу в базу логин под которым пытались авторизоваться и проверяю если такой логин уже есть в базе то смотрю его значение count и если оно равно трём то вывожу каптчу( return render_to_response('login.html', {'form' : form, ‘error_login’: 1,'html_captcha' : html_captcha}):
if Badlogin.objects.filter(username = username):
p = Badlogin.objects.get(username = username)
if p.count < 3:
p.count +=1
p.save()
return render_to_response('registration/login.html', {'form' : form, 'error_login': 1})
else:
p = Badlogin(username = username, count = 1)
p.save()
return render_to_response('registration/login.html', {'form' : form, 'error_login': 1})
Код проверки каптчи такой:
check_captcha = captcha.submit(request.POST['recaptcha_challenge_field'],
request.POST['recaptcha_response_field'],
settings.RECAPTCHA_PRIVATE_KEY, request.META['REMOTE_ADDR'])
if check_captcha.is_valid is False:
form = AuthForm()
return render_to_response('login.html', {'form' : form, 'error_captcha' : 1, 'html_captcha' : html_captcha})
Вот только как мне проверять каптчу? Отдаю пользователю страницу с каптчей, а где мне её проверять?

Весь код:
from django import forms
from recaptcha.client import captcha
from django.conf import settings
from django.shortcuts import render_to_response
from django.contrib.auth import authenticate, login
from django.http import HttpResponseRedirect
from callme.models import Badlogin

class AuthForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput())

html_captcha = captcha.displayhtml(settings.RECAPTCHA_PUB_KEY)
def auth(request):
if request.method == 'POST':
form = AuthForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
if Badlogin.objects.filter(username = username, count = 3):
check_captcha = captcha.submit(request.POST['recaptcha_challenge_field'], request.POST['recaptcha_response_field'], settings.RECAPTCHA_PRIVATE_KEY, request.META['REMOTE_ADDR'])
if check_captcha.is_valid is False:
form = AuthForm()
return render_to_response('registration/login.html', {'form' : form, 'error_captcha' : 1, 'html_captcha' : html_captcha})
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
# Redirect to a success page.
return HttpResponseRedirect('/')
else:
# Return a 'disabled account' error message
return render_to_response('registration/login.html', {'form' : form, 'error_login': 1})
else:
# Return an 'invalid login' error message.
if Badlogin.objects.filter(username = username):
p = Badlogin.objects.get(username = username)
if p.count < 3:
p.count +=1
print p
p.save()
else:
p = Badlogin(username = username, count = 1)
p.save()
return render_to_response('registration/login.html', {'form' : form, 'error_login': 1})
else:
form = AuthForm()
return render_to_response('registration/login.html', {'form': form})



Отредактировано (Сен. 27, 2009 18:53:28)

Офлайн

#2 Авг. 8, 2010 06:13:16

Werevolff
От:
Зарегистрирован: 2010-08-05
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод каптчи после нескольких попыток авторизации

Геморрой. Не проще капчу воткнуть так, чтобы она всегда отображалась? Боту будет не сладко, а пользователь примет это легче, чем капчу, которая будет то появляться, то исчезать при входе.



Офлайн

  • Начало
  • » Django
  • » Вывод каптчи после нескольких попыток авторизации[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version