A partir de Django 1.9, puede definir sus propios validadores de contraseñas. Incluso podría simplemente redefinir uno existente, si lo desea.Cuando lo haces, agrega un método:
from django.contrib.auth.password_validation import MinimumLengthValidator
class MyPasswordValidator(MinimumLengthValidator):
def password_changed(self, password, user):
# put your password changed logic here
Asegúrese de incluir la nueva clase en la configuración de la siguiente manera:
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'my_package.password_validators.MyPasswordValidator',
'OPTIONS': {
'min_length': 8,
}
},
...
]
Ahora, cada vez que se cambia una contraseña por el usuario, su MyPasswordValidator clase será notificado. En mi experiencia, esta es la mejor manera de hacer esto porque:
- Al utilizar señales para capturar estos eventos, también puede capturar eventos en los que el sistema de re-codificado una contraseña existente debido a un cambio en el hashing parámetros, en la mayoría de los casos, no le gustaría capturar estos eventos y no hay una forma obvia de evitarlo con señales.
- Puede simplemente agregar una llamada de función en el método save() de todos sus formularios de manejo de contraseñas, pero esto se vuelve difícil cuando quiere hacer lo mismo con el formulario incorporado de contraseña de administrador y no lo ayudará si los cambios de contraseña se realizan mediante programación fuera de un formulario.
Le advierto que tenga en cuenta que el parámetro de contraseña en password_changed() es, de hecho, la contraseña sin formato del usuario. Tenga cuidado al manejar esto y nunca lo guarde en ningún lugar desencriptado/sin grabar.
¿Sin embargo, las señales de Arent son sincrónicas? A menos que el correo ocurra en un proceso de asincronización, ¿no sería lo mismo? – jdi
De ahí el bit "disparar un hilo". Si crea un hilo para enviar el correo electrónico en la señal, se convierte en asíncrono. La señal devuelve el procesamiento y el nuevo hilo se adapta a su proceso de envío de correo electrónico. –
Ah se perdió ese poquito. Solo se centró en las señales – jdi