Требование минимальной сложности пароля в django allauth

Я пытаюсь внедрить минимальный набор критериев для паролей. Однако даже при соблюдении указанных ниже требований пользователи могут регистрироваться с паролем из одного символа. Как я могу потребовать определенную минимальную сложность пароля при использовании django-allauth с пользовательским адаптером

# adapter.py
from typing import Any
from allauth.account.adapter import DefaultAccountAdapter
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
from allauth.exceptions import ImmediateHttpResponse
from django.conf import settings
from django.forms import ValidationError
from django.http import HttpRequest


class AccountAdapter(DefaultAccountAdapter):
    
    def is_open_for_signup(self, request: HttpRequest):
        return getattr(settings, "ACCOUNT_ALLOW_REGISTRATION", True)

    def clean_password(self, password, user=None):
        special_characters = "[~\!@#\$%\^&\*\(\)_\+{}\":;'\[\]]"
        min_length = 1
        if len(password) < 8:
            raise ValidationError('Password length must be greater than 8 characters.')
        if not any(char.isdigit() for char in password):
            raise ValidationError('Password must contain at least %(min_length)d digits.') % {'min_length': min_length}
        if not any(char.isalpha() for char in password):
            raise ValidationError('Password must contain at least %(min_length)d letters.') % {'min_length': min_length}
        if not any(char in special_characters for char in password):
            raise ValidationError('Password must contain at least %(min_length)d special characters.') % {'min_length': min_length}
        return password

class SocialAccountAdapter(DefaultSocialAccountAdapter):
    
    def is_open_for_signup(self, request: HttpRequest, sociallogin: Any):
        return getattr(settings, "ACCOUNT_ALLOW_REGISTRATION", True)
# settings.py

# https://django-allauth.readthedocs.io/en/latest/configuration.html
ACCOUNT_ADAPTER = "project.adapters.user.AccountAdapter"

# https://django-allauth.readthedocs.io/en/latest/forms.html
ACCOUNT_FORMS = {"signup": "project.forms.user.UserSignupForm"}

# https://django-allauth.readthedocs.io/en/latest/configuration.html
SOCIALACCOUNT_ADAPTER = "project.adapters.user.SocialAccountAdapter"

Я смог решить проблему, не используя адаптер, а поместив это в файл forms.py

    def clean_password(self):
        special_characters = "[~\!@#\$%\^&\*\(\)_\+{}\":;'\[\]]"
        if len(self.data['password']) < 8:
            raise ValidationError('Password length must be greater than 8 characters.')
        if not any(char.isdigit() for char in self.data['password']):
            raise ValidationError('Password must contain at least 1 digit.')
        if not any(char.isalpha() for char in self.data['password']):
            raise ValidationError('Password must contain at least 1 letter.')
        if not any(char in special_characters for char in self.data['password']):
            raise ValidationError('Password must contain at least 1 special characters.')
        return self.data['password']
Вернуться на верх