如何在django自定义身份验证后端访问请求?

Rog*_*ger 9 authentication django

我想用django的身份验证执行以下操作:

  • 记录错误的登录尝试
  • 在'x'次错误登录尝试后暂时锁定帐户
  • 登录成功登录.

我认为自定义auth后端将是解决方案.

我可以完成我想要的大部分工作,但我想记录进行尝试的用户的IP和REMOTE_HOST.

如何在auth后端访问请求对象?

谢谢

Wil*_*rdy 10

身份验证后端可以为该authenticate()方法获取任意数量的自定义参数.例如:

class MyBackend:
    def authenticate(self, username=None, password=None, request=None):
         # check username, password
         if request is not None:
             # log values from request object
Run Code Online (Sandbox Code Playgroud)

如果您在自己的视图中调用authenticate,则可以传递请求对象:

from django.contrib.auth import authenticate

def login(request):
    # discover username and password
    authenticate(username=username, password=password, request=request)
    # continue as normal
Run Code Online (Sandbox Code Playgroud)

如果您使用的是django的登录视图(或管理员登录),则您将无法获得额外信息.简而言之,您必须使用自己的自定义登录视图.

此外,在自动锁定帐户时要小心:您允许某人故意锁定您的某个用户帐户(拒绝服务).有办法解决这个问题.此外,请确保您的错误尝试日志不包含任何尝试的密码.