Django记录user_login_failed信号的用户IP

Seb*_*aye 6 python django ip signals

我想在我的Django应用程序中记录用户IP地址,特别是登录,注销和失败的登录事件.我正在使用Django内置函数,如下所示:

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)
Run Code Online (Sandbox Code Playgroud)

问题是我没有找到获取user_login_failed信号IP的方法,因为这个函数没有request参数(https://docs.djangoproject.com/en/1.7/ref/contrib/auth/# module-django.contrib.auth.signals).该credentials参数是仅包含usernamepassword字段的字典.

我怎么能得到这个信号的IP地址?

非常感谢您的帮助.

mis*_*bah 4

不幸的是,user_login_failed信号不将请求作为参数传递。

\n\n

签出django-axes\xe2\x80\x94 https://github.com/django-pci/django-axes/

\n\n

它使用自定义视图装饰器来跟踪失败的登录。

\n\n

https://github.com/django-pci/django-axes/blob/master/axes/decorators.py#L273

\n