6

Estoy intentando descubrir cómo mejorar el método de autenticación con funcionalidad adicional.Reemplazando el método de autentificación - administrador de Django

p. Ej.

  • contraseñas vencen
  • formatos especiales contraseña
  • requisitos de longitud
  • etc ...

Es bastante sencillo para el frontend del sitio, pero ¿qué pasa con el panel de administración?


Calculo que debo anular objeto de administrador del usuario, como autenticar probablemente reside allí. Creo que es bastante difícil de entender.

¡Gracias de antemano! :)

Respuesta

6

Puede crear back-end de autenticación personalizado siguiendo las instrucciones en http://docs.djangoproject.com/en/dev/topics/auth/#authentication-backends. En esencia, se crea una clase back-end que tiene un método authenticate:

class MyBackend: 
    def authenticate(self, username=None, password=None): 
     # Check the username/password and return a User. 

A continuación, agregue la clase a AUTHENTICATION_BACKENDS en settings.py.

Aunque esto es para la autenticación, podría hacer todas las validaciones de contraseñas que mencionó simplemente redireccionando a un usuario a una página de cambio de contraseña si la contraseña es correcta pero expiró, por ejemplo. Considere usar el messaging framework para darle al usuario una pista sobre lo que está sucediendo al dirigirlo a una página genérica de cambio de contraseña.

+0

Hola has cubierto prácticamente todo: O ¡Esta es una buena respuesta! Muchas gracias. – RadiantHex

+0

Hola, estoy implementando el auth back-end, estoy algo confundido acerca de las señales. No hay forma de que pueda implementar una validación adecuada dentro del administrador. – RadiantHex

+0

@RadiantHex Pido disculpas por la parte de señal django. No es aplicable en su caso, ya que no puede leer la contraseña sin procesar del modelo (ya se ha procesado) y, por lo tanto, no puede hacer su validación. La sugerencia de Jordan sobre el secuestro de la página de contraseñas a una vista personalizada es mejor. Solo necesita secuestrar todas las páginas que pueden cambiar la contraseña. Otro enfoque es probar [el parche de mono] (http://stackoverflow.com/questions/192649/can-you-monkey-patch-methods-on-core-types-in-python) del método 'set_password' del 'Modelo de usuario' –

1

Si desea que la validación de las contraseñas se incorpore en el modelo, entonces es probable que desee extend the django User model.

De lo contrario, podría hacer lo siguiente:

  • opciones de anulación de administración de contraseñas mediante la creación de sus propios puntos de vista para cambiar y establecer contraseñas, a continuación, poner las direcciones URL pertinentes justo por encima (r'^admin/', include(admin.site.urls)). Regex se parecería a (r'^admin/auth/user/(\d+)/password/', new_change_password).
  • Mantenga un registro de la antigüedad de la contraseña en un modelo por separado y luego, cuando caduque, redirija a una contraseña de cambio una vez que caduque.
+0

¡Hola, gracias por tu respuesta! – RadiantHex

+0

Hola, esta respuesta me resulta más útil, ¿tiene alguna pista sobre cómo reenviar una vista a la vista de cambio de contraseña? – RadiantHex

+0

¿Te refieres a una redirección? Puede usar 'HttpResponseRedirect' para redirigir al usuario a la url de la página de cambio de contraseña. Creo que si miras el archivo urls para django/contrib/auth entonces puedes encontrar qué nombre de url usar. –

Cuestiones relacionadas