2010-08-15 46 views
8

我想做的事与Django的认证如下:后不正确的登录尝试 如何在django自定义身份验证后端访问请求?

  • 登录成功登入功能的“X”号

    • 登录不正确的登录尝试
    • 暂时锁定帐户。

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

    我可以做大部分我想做的事情,但我想记录尝试的用户的IP和REMOTE_HOST。

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

    由于

  • 回答

    10

    的认证后端可以采取任何数目的用于authenticate()方法自定义参数。例如:如果你使用Django的登录视图(或管理员登录)

    from django.contrib.auth import authenticate 
    
    def login(request): 
        # discover username and password 
        authenticate(username=username, password=password, request=request) 
        # continue as normal 
    

    ,您:

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

    如果你调用自己的观点进行验证,您可以通过请求对象不会有额外的信息。简而言之,您必须使用自己的自定义登录视图。

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

    +0

    我扩展了ModelBackend - python不允许我重载方法吗?什么是实现这一目标的好方法?只需重命名'authenticate'方法并在我看来调用它? – Roger 2010-08-15 17:28:23

    +0

    我需要在登录视图中输入什么内容?只需复制整个当前的contrib.auth登录视图?我不明白,因为该方法永远不会调用'验证'... – Roger 2010-08-15 20:10:47

    +0

    你肯定可以在python中重载。 'contrib.auth'要求后端有一个'authenticate'方法,所以你必须这样称呼它。 – 2010-08-16 00:17:47