2010-08-15 11 views
8

Quiero hacer lo siguiente con la autenticación de Django:cómo acceder a la solicitud en un back-end de autenticación personalizada django?

  • registro incorrectas intentos de inicio de sesión
  • cuentas Temporalmente bloqueo después de un número x de intentos fallidos de inicio de sesión
  • Log exitosos inicios de sesión.

Pensé que un back-end de autenticación personalizada sería la solución.

Puedo hacer la mayor parte de lo que quiero, pero quiero registrar la dirección IP y REMOTE_HOST del usuario que hace el intento.

¿cómo puedo acceder al objeto de solicitud en el back-end de autenticación?

Gracias

Respuesta

10

El motor de autenticación pueden tomar cualquier número de parámetros personalizados para el método authenticate(). Por ejemplo:

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

Si está llamando a autenticar en su propio punto de vista, se puede pasar el objeto de solicitud:

from django.contrib.auth import authenticate 

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

Si está utilizando la vista de inicio de sesión de Django (o el nombre de usuario admin), se no tendrá la información adicional. En pocas palabras, deberá usar su propia vista de inicio de sesión personalizada.

Además, tenga cuidado al bloquear cuentas automáticamente: permite que alguien cierre deliberadamente una de las cuentas de su usuario (denegación de servicio). Hay formas de evitar esto Además, asegúrese de que su registro de intentos incorrectos no contenga ningún intento de contraseñas.

+0

estoy extendiendo el ModelBackend - python no me permite sobrecargar los métodos ¿verdad? ¿Cuál sería una buena forma de lograr esto? ¿Simplemente renombra el método 'autenticar' y lo llama en mi opinión? – Roger

+0

¿Qué necesito poner en la vista de inicio de sesión? solo copie la totalidad de la vista actual de inicio de sesión contrib.auth? No entiendo porque ese método nunca llama 'autenticar' ... – Roger

+0

Sin duda puede sobrecargar en Python. 'contrib.auth' requiere que los back-end tengan un método' authenticate', por lo que tendrás que llamarlo así. –

Cuestiones relacionadas