Django AUTH_PASSWORD_VALIDATORS 检查符号和其他要求

and*_*dms 0 python passwords django web-applications

是否可以验证密码要求,例如:

  • 一个大写字母
  • 两个符号

使用 Django 内置的密码管理?例如这些:

django.contrib.auth.password_validation.UserAttributeSimilarityValidator
django.contrib.auth.password_validation.MinimumLengthValidator
django.contrib.auth.password_validation.CommonPasswordValidator
django.contrib.auth.password_validation.NumericPasswordValidator
Run Code Online (Sandbox Code Playgroud)

我发现以下 Python 包可以实现我想要的功能,但我想知道它是否可以在本地完成:

https://pypi.org/project/django-password-validators/

谢谢!

Res*_*ues 6

您可以编写自己的验证器\nDjango\xe2\x80\x99s 密码验证器有一个相当小的接口。他们必须实现两种方法:

\n

validate(self, password, user=None)如果密码有效,则必须返回 None;如果密码无效,则必须引发 ValidationError 并显示错误消息。您必须能够处理 None 的用户 - 如果这意味着您的验证器可以\xe2\x80\x99t 运行,则返回 None 不会出现错误。在大多数情况下,您甚至不需要用户验证密码(更适合我们想要防止密码重复使用的情况)\nget_help_text()必须提供一些帮助文本来向用户解释密码要求。

\n

OPTIONS中的任何项目AUTH_PASSWORD_VALIDATORS将传递给构造函数。所有构造函数参数都应该有一个默认值。

\n
from django.core.exceptions import ValidationError\nfrom django.utils.translation import gettext as _\n\nclass CaptialAndSymbolValidator:\n    def __init__(self, number_of_capitals=1, number_of_symbols=2, symbols="[~!@#$%^&*()_+{}\\":;\'[]"):\n        self.number_of_capitals = number_of_capitals\n        self.number_of_symbols = number_of_symbols\n        self.symbols = symbols\n\n    def validate(self, password, user=None):\n        capitals = [char for char in password if char.isupper()]\n        symbols = [char for char in password if char in self.symbols]\n        if len(capitals) < self.number_of_capitals:\n            raise ValidationError(\n                _("This password must contain at least %(min_length)d capital letters."),\n                code=\'password_too_short\',\n                params={\'min_length\': self.number_of_capitals},\n            )\n        if len(symbols) < self.number_of_symbols:\n            raise ValidationError(\n                _("This password must contain at least %(min_length)d symbols."),\n                code=\'password_too_short\',\n                params={\'min_length\': self.number_of_symbols},\n            )\n\n    def get_help_text(self):\n        return _(\n            "Your password must contain at least %(number_of_capitals)d capital letters and %(number_of_symbols) symbols."\n            % {\'number_of_capitals\': self.number_of_capitals, \'number_of_symbols\': self.number_of_symbols}\n        )\n\n\nAUTH_PASSWORD_VALIDATORS = [\n    ...\n    {\n    \'NAME\': \'path.to.your.validators.CaptialAndSymbolValidator\',\n    \'OPTIONS\': {\n        # use this to override any of the defaults\n        \'symbols\': "@^#",\n        }\n    },\n]\n
Run Code Online (Sandbox Code Playgroud)\n