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

时间:2010-08-15 16:53:17

标签: django authentication

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

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

我认为自定义身份验证后端将是解决方案。

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

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

由于

2 个答案:

答案 0 :(得分: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

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

from django.contrib.auth import authenticate

def login(request):
    # discover username and password
    authenticate(username=username, password=password, request=request)
    # continue as normal

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

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

答案 1 :(得分:0)

在最新版本的Django中,authenticate()接受“请求”作为第一个参数:

  • 自Django 1.1起可选
  • 自Django 2.1以来必需

请参阅: