Прежде всего оба метода возвращают True.Я ожидаю, что второй вернет False, используя стандартную процедуру аутентификации администратора django, или я ошибаюсь?
def post_login(sender, **kwargs):
"""
Django 1.3 post login signal handler
"""
# do stuff
user = kwargs['user']
print user.is_authenticated()
user_logged_in.connect(post_login)
def post_logout(sender, **kwargs):
"""
Django 1.3 post logout signal handler
"""
# do stuff
user = kwargs['user']
print user.is_authenticated()
user_logged_out.connect(post_logout)
В любом случае, я пытаюсь понять, почему у django также нет ловушки при сбое аутентификации.. Я могу использовать свой собственный бэкэнд для пользователей, чтобы войти и выйти из своей учетной записи, однако я хотел бы также подключиться к процедуре администратора, чтобы охватить все в одной части кода. Я нашел некоторые темы, но не знал, как это сделать.исправить это.
Я придумал:
import settings
from django.dispatch import Signal
failed_login = Signal(providing_args=['user'])
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
class AuthSignalBackend(ModelBackend):
def authenticate(self, username=None, password=None):
try:
user = User.objects.get(username=username)
if user.check_password(password):
return user
else:
failed_login.send(sender=None, user=user)
except User.DoesNotExist:
return None
def login_handler(sender, **kwargs):
if settings.DEBUG:
print "failed login detected...!"
failed_login.connect(login_handler)
Это прекрасно работает, однако в ModelBackend нет запроса, в то время как у сигналов post_login и logout действительно есть запрос. Это прискорбнопотому что это было бы здорово для ведения журнала IP
Любой совет приветствуется, я уверен, что люди должны были встретить этот совет раньше ..