Начиная с Django 1.9, вы можете определить свои собственные средства проверки пароля. Вы можете даже просто переопределить существующий, если хотите. Когда вы это сделаете, добавьте метод:
from django.contrib.auth.password_validation import MinimumLengthValidator
class MyPasswordValidator(MinimumLengthValidator):
def password_changed(self, password, user):
# put your password changed logic here
Убедитесь, что ваш новый класс включен в ваши настройки следующим образом:
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'my_package.password_validators.MyPasswordValidator',
'OPTIONS': {
'min_length': 8,
}
},
...
]
Теперь, каждый раз, когда пользователь меняет пароль, ваш класс MyPasswordValidator будет уведомляться. По моему опыту, это лучший способ сделать это, потому что:
- При использовании сигналов для захвата этих событий вы также будете захватывать события, когда система перекодирует существующий пароль из-за изменения параметров хеширования, в большинстве случаев вам не захочется захватывать эти события, и нет очевидного способа чтобы предотвратить это с помощью сигналов.
- Вы можете просто добавить вызов функции в методе save () всех ваших форм обработки паролей, но это становится трудным, если вы хотите сделать то же самое со встроенной формой смены пароля администратора, и не поможет вам, если изменения пароля производятся программно вне формы.
Я предупреждаю вас, что вам нужно знать, что параметр пароля в password_changed () фактически является необработанным паролем пользователя. Будьте осторожны при обращении с этим и абсолютно никогда не храните это нигде в незашифрованном виде.