Ich möchte die Benutzer-IP-Adresse in meiner Django-Anwendung, speziell für Login, Logout und fehlgeschlagene Login-Ereignisse protokollieren. Ich verwende Funktionen Django gebautet wie folgt:Django log Benutzer IP für user_login_failed Signal
from django.contrib.auth.signals import user_logged_in, user_logged_out, user_login_failed
from ipware.ip import get_ip
import logging
logger = logging.getLogger(__name__)
def log_logged_in(sender, user, request, **kwargs):
logger.info("%s User %s successfully logged in" % (get_ip(request), user))
def log_logged_out(sender, user, request, **kwargs):
logger.info("%s User %s successfully logged out" % (get_ip(request), user))
def log_login_failed(sender, credentials, **kwargs):
logger.warning("%s Authentication failure for user %s" % ("...IP...", credentials['username']))
user_logged_in.connect(log_logged_in)
user_logged_out.connect(log_logged_out)
user_login_failed.connect(log_login_failed)
Das Problem ist, dass ich nicht einen Weg, um die IP für das user_login_failed
Signal gefunden haben, da diese Funktion nicht die request
in den Parametern hat (https://docs.djangoproject.com/en/1.7/ref/contrib/auth/#module-django.contrib.auth.signals) . Der Parameter credentials
ist ein Wörterbuch, das nur die Felder username
und password
enthält.
Wie kann ich die IP-Adresse für dieses Signal erhalten?
Vielen Dank im Voraus für Ihre Hilfe.