Django Better Passwords
This app provides tools to enforce stronger password policies and expiration.
Features
- Configurable password expiration;
- Customizable password validator;
- Uses Django messages framework to warn the user about the expiration;
- Prevents user from logging in after expiration and redirects to password change page;
- Compatible with default Django admin and Django CMS (django-cms) admin;
- Can be used to expire only staff passwords, or for all users;
- Force password update immediately after user creation.
Requirements
Requires Python >= 3.6 and Django >=2. Recommended Python 3.11 or 3.12 and Django 4.2 or 5.0;
Quick start
- Install the lib with
pip install django-better-passwords. - Add
'django_better_passwords.apps.BetterPasswordsConfig'toINSTALLED_APPS. - Add
'django_better_passwords.middleware.PasswordExpirationMiddleware'toMIDDLEWARE.
It should be listed after authentication, session and message middlewares, like this:MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django_better_passwords.middleware.PasswordExpirationMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", ]
- Add
'django_better_passwords.validators.custom_password_validator.CustomPasswordValidator'toAUTH_PASSWORD_VALIDATORS.
Comment out or remove'django.contrib.auth.password_validation.MinimumLengthValidator'to avoid conflicting:AUTH_PASSWORD_VALIDATORS = [ ... # { # "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", # }, { "NAME": "django_better_passwords.validators.custom_password_validator.CustomPasswordValidator", "OPTIONS": { "min_length": 8, "max_length": 20, "required_characters": "!#$%^&*()_+{}[]:\"-=,./<>?", "required_characters_count": 2, "forbidden_characters": "@", }, }, ]
- The validator accepts 5 parameters, being:
min_length (int): the minimum password length;max_length (int): the maximum password length;required_characters (str): a string containing a list of special characters of which at leastrequired_characters_countmust be present in the password;required_characters_count (int): the number of special required characters that must be present in the password;forbidden_characters (str): a string containing a list of characters none of which can be present in the password;
- Aditional app settings:
DBP_PASSWORD_EXPIRATION_DAYS = 60 DBP_PASSWORD_CHANGE_REDIRECT_URL = "password_change" DBP_LOGOUT_URL = "logout"
Attention: IfDBP_PASSWORD_CHANGE_REDIRECT_URLis present, when a user tries to log in or navigate to any url, he will be redirected to thepassword_changepage.
If it is not present, only users who try to access the admin area will be redirected.
Contributing
We use pre-commit paired with black, flake8 and isort to keep things in their rightful place.
After cloning the project:
- Create and activate a venv;
- Install pip-tools;
- Run
pip-compile requirements.inandpip-sync requirements.txtto install dependencies; - Run
pre-commit install -fto install pre-commit hook. It will create a git hook, that will run automatically before every commit;
Acknowledgements
This app is inspired by django-password-policies-iplweb and django-password-expire.
Author
André Corrêa - andre.lccorrea@gmail.com
Metadata
Release files for django-better-passwords 0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| django-better-passwords-0.2.tar.gz | 11.2 kB | Without provenance | Details for django-better-passwords-0.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| django_better_passwords-0.2-py3-none-any.whl | Python 3 | none | any | Details for django_better_passwords-0.2-py3-none-any.whl |
Total release size: 22.1 kB
Release files / django-better-passwords-0.2.tar.gz
| Download URL | django-better-passwords-0.2.tar.gz |
|---|---|
| Size | 11.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e8e3695525ec7435f7ae8af3f8c6d644027394bc8cd2ec4632f8b6f47431ba73
|
|
BLAKE2b-256 checksum How to use checksums |
acab11e3bfa46797f0682447a7aeb6a9fba321462f95401873d431d6972547f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.11.6
|
Release files / django_better_passwords-0.2-py3-none-any.whl
| Download URL | django_better_passwords-0.2-py3-none-any.whl |
|---|---|
| Size | 10.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
234ed87e253cf7d9e07274a7a8542a109fbb74f833c6c52f3e8806bcb1a7fcfa
|
|
BLAKE2b-256 checksum How to use checksums |
7e5d8e324bb07081514e3c78dcd0c9266fdd143a289ab86a0d9c624d228e18ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.11.6
|
Security for django-better-passwords 0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.