Skip to main content

Implements Django Admin OTP Auth

Project description

django-admin-otp

Lightweight MFA (TOTP) for Django Admin: enable/disable MFA directly from the admin, verify codes on login, and support "trusted devices" via secure cookies.


Features

  • 🔑 TOTP-based MFA for Django Admin (Google Authenticator, Authy, etc.)
  • 🛠 Setup MFA from the admin panel (QR code + code entry)
  • ❌ Disable MFA with code confirmation
  • 💻 Trusted devices: skip MFA for up to N days
  • ⚙️ Middleware-based enforcement for admin access
  • 📦 Configurable via environment variables
  • 🎨 Ready-to-use templates for verification and setup pages

Installation

pip install django-admin-otp

Quickstart

Add this code to settings.py

from django_admin_otp import settings as otp_settings
# settings.py

INSTALLED_APPS = [
    # ...
    "django.contrib.admin",
    "django_admin_otp",
]
# Should be last middleware
MIDDLEWARE = [
    # ...
    "django_admin_otp.middleware.AdminOTPMiddleware",
]
...
# at the end of file
otp_settings.init()

Add urls

from django.contrib import admin
from django.urls import include, path
from django.conf import settings

urlpatterns = [
    path("admin/", admin.site.urls),
    path("admin-mfa/", include("django_admin_otp.urls")),
]

Export variables

export ADMIN_OTP_PROJECT_NAME "Your-project-name"

Run migrations and createsuperuser (if it hasn't created yet):

python manage.py migrate django_admin_otp
&
python manage.py createsuperuser

Run server

python manage.py runserver

How to setup OTP

Go to localhost:8000/admin/, login to panel and go to OTP Verifications panel Setup MFA First Step Click on 'Setup MFA for current user' Setup MFA Second Step Scan QR and enter code from your app here. Click on submit. Setup MFA Third Step If code is correct - MFA for your user would be set. You will be redirected to Django Auth Form (via logout). Now you can start login process.


OTP Login process

Login into admin panel. After success - you will see theese form. Login First Step Enter code to from your app and choose trust device option. If would set - you can login from this device without MFA process. (stored in cookie). It would worked for some time (see Configuration section).


How to disable

Go to OTPVerification admin panel. Disconnect MFA First Step If you have already connected to MFA - the button would be "Disable MFA for Current user" Disconnect MFA Second Step Click on it, enter code from your app and your mfa (with trusted devices) would be deleted. Disconnect MFA Third Step


Configuration

Configurable environment variables:

  • ADMIN_OTP_PROJECT_NAME - project name which would display in Auth APP.
  • ADMIN_PATH — admin URL prefix (default "admin").
  • ADMIN_OTP_FORCE (int) — require MFA setup for all admin users (default 0). See Force OTP section for more details.
  • ADMIN_OTP_TRUSTED_DEVICE_DAYS — validity period for trusted devices (defaults 30 days)
  • ADMIN_OTP_DEVICE_TOKEN_COOKIE_NAME — name of trusted device cookie (default "admin_otp_trusted_device").

FORCE OTP

This parameter change default setup mfa behavior. If is set, all users that tries to login into admin panel would be redirected to setup mfa process. Without set mfa - you wouldn't be able to login in admin panel. How it goes: After login you'll see this form Force OTP First Step After setup mfa - you will be redirected on login to OTP process form Login First Step


How to contribute

...


How to develop


How to test

...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_admin_otp-0.1.18.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_admin_otp-0.1.18-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

Details for the file django_admin_otp-0.1.18.tar.gz.

File metadata

  • Download URL: django_admin_otp-0.1.18.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.26.6 CPython/3.13.12 Linux/6.14.0-1017-azure

File hashes

Hashes for django_admin_otp-0.1.18.tar.gz
Algorithm Hash digest
SHA256 313672176670a86de967050e1016fde5c57d4b41c847d23d2930f34e580705a8
MD5 889d7e5cb4959aae032586be64dd59b8
BLAKE2b-256 3a9576b5a17cf048e34d985f4387d819c1a3f659dc8e1b02e07dc5579a246f44

See more details on using hashes here.

File details

Details for the file django_admin_otp-0.1.18-py3-none-any.whl.

File metadata

  • Download URL: django_admin_otp-0.1.18-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.26.6 CPython/3.13.12 Linux/6.14.0-1017-azure

File hashes

Hashes for django_admin_otp-0.1.18-py3-none-any.whl
Algorithm Hash digest
SHA256 f66e4c11a0afb96cb2cf9f98dbafa71005526a07d6ff834ef7960f526ded09bf
MD5 b56195af69b5cbcc8740449d4490eb47
BLAKE2b-256 9ec64616fd1b5f14c2a71205dac16a5c484c713c17facfbbb35b27a13757eab9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page