django-trench
| django-trench provides a set of REST API endpoints to supplement django-rest-framework with multi-factor authentication (MFA, 2FA). It supports both standard built-in authentication methods, as well as JWT (JSON Web Token).
| We deliver a couple of sample secondary authentication methods including sending OTP based code by:
- SMS / text
- 3rd party mobile apps
- YubiKey
| Developers can easily add their own authentication backends supporting any communication channel.
Features
- Easily pluggable and compatible with django-rest-framework
- Allows user to pick an additional authentication method from range of backends defined by a developer. Read more: backends
- Comes out of a box with email, SMS, mobile apps and YubiKey support
Supported versions
- Python 3.7, 3.8, 3.9, 3.10
- Django 2.0, 2.1, 2.2, 3.0, 3.1, 3.2, 4.0, 4.1
- Django REST Framework 3.10, 3.11, 3.12, 3.13, 3.14
| If you are going to use JWT authentication:
- djangorestframework-simplejwt >= 4.3.0
Quick Start
- Install the package using pip:
pip install django-trench
or add it to your requirements file.
- Add
trench
library to INSTALLED_APPS in your app settings file:
INSTALLED_APPS = (
...,
'rest_framework',
'rest_framework.authtoken', # In case of implementing Token Based Authentication
...,
'trench',
)
- Run migrations
| Read further in: installation.
Translation
Trench uses Transifex service to translate our package into other languages.
We will appreciate your help with translation.
https://www.transifex.com/merixstudio/django-trench/dashboard/
Local development
-
Clone the repo.
-
Crete virtual environment named e.g.
.venv
:shell virtualenv .venv
-
Activate the virtual environment:
shell source .venv/bin/activate
-
Install dependencies:
shell pip install black mypy pip install -r testproject/requirements.txt
-
Set environment variables:
shell export PYTHONPATH=./testproject export DJANGO_SETTINGS_MODULE=settings export SECRET_KEY=YOURsecretGOEShere
-
Create a symbolic link to the
trench/
module inside thetestproject/
directory to emulate thetrench
package being installed.``` shell
make sure you run this command from the root directory of this project
ln -s $(pwd)/trench/ $(pwd)/testproject/trench ```
-
Check whether the tests are passing:
shell pytest --cov=testproject/trench testproject/tests/
Remember - anytime you change something in the django-trench
source
code you need to re-build and re-install the package (steps 6-7) for the
changes to be present during e.g. running the tests.
-
- [OPTIONAL] To make the tests run faster you can try to execute them in parallel.
-
To do so you need to install the
pytest-xdist
package and run the tests with additional parameter of-n 8
where8
stands for the number of threads that will be spawned for executing the tests. Depending on the machine you\'re using using this tool can speed up the test execution process up to 5 times.
``` shell pytest -n 8 --cov=testproject/trench testproject/tests/ ```