App Django réutilisable pour l'authentification par numéro de téléphone.
- Copiez le dossier
scb_auth/dans votre projet Django. - Ajoutez-le à
INSTALLED_APPS:
INSTALLED_APPS = [
...
"scb_auth",
]- Déclarez le modèle utilisateur personnalisé :
AUTH_USER_MODEL = "scb_auth.User"- Lancez les migrations :
python manage.py migrateToute la configuration passe par le dictionnaire SCB_AUTH dans settings.py.
| Clé | Type | Défaut | Description |
|---|---|---|---|
OPTIONAL_FIELDS |
list[str] |
[] |
Champs à désactiver. Valeurs acceptées : voir ci-dessous |
OTP_LIFETIME |
int |
300 |
Durée de vie d'un OTP en secondes |
OTP_DIGITS |
int |
4 |
Nombre de chiffres du code OTP |
USE_OTP |
bool |
True |
Active/désactive entièrement le modèle OtpToken |
REGISTER_INCLUDE_IN_OTP |
bool |
False |
Permet de cree un utilisateur au login si le OTP login y est |
| Nom du champ | Ce qu'il apporte |
|---|---|
otp_secret |
Secret TOTP sur le User + modèle OtpToken + méthodes OTP |
status_verified |
Champ de statut + propriétés is_verified / is_unauthorized |
# settings.py — aucune configuration nécessaire
# ou explicitement :
SCB_AUTH = {
"OPTIONAL_FIELDS": [],
}SCB_AUTH = {
"OPTIONAL_FIELDS": ["status_verified"],
}Le modèle User n'aura pas le champ status_verified, ni les propriétés
is_verified et is_unauthorized.
SCB_AUTH = {
"OPTIONAL_FIELDS": ["otp_secret"],
}Le modèle User n'aura pas le champ otp_secret et OtpToken ne sera pas
créé en base de données.
SCB_AUTH = {
"OPTIONAL_FIELDS": ["otp_secret", "status_verified"],
}SCB_AUTH = {
"OPTIONAL_FIELDS": [], # tout garder
"OTP_DIGITS": 6, # codes à 6 chiffres
"OTP_LIFETIME": 120, # 2 minutes
}SCB_AUTH = {
"USE_OTP": False, # OtpToken ne sera pas créé
}from scb_auth.models import User
user = User.get("+2250700000000") # lève DoesNotExist ou PermissionErrorfrom scb_auth.models import OtpToken
token, _ = OtpToken.objects.get_or_create(user=user)
code = token.generate_otp() # renvoie le code en clair
is_valid = token.verify_otp(code) # True / Falseif user.is_verified:
...
if user.is_unauthorized:
raise PermissionError("Compte non autorisé")from scb_auth.conf import is_field_enabled
if is_field_enabled("status_verified"):
user.status_verified = User.StatusVerified.VERIFIED
user.save()scb_auth/
├── __init__.py
├── apps.py
├── conf.py ← lecture de SCB_AUTH depuis settings
├── models.py ← User, OtpSecretMixin, StatusVerifiedMixin, OtpToken
├── admin.py ← administration Django (s'adapte aux champs actifs)
├── migrations/
│ └── __init__.py
└── README.md
- Après avoir modifié
OPTIONAL_FIELDS, regénérez les migrations :python manage.py makemigrations scb_auth python manage.py migrate
- Ne modifiez pas
OPTIONAL_FIELDSsur une base de données existante sans prévoir une migration de données. - En mode
DEBUG=True,verify_otp()retourne toujoursTrue.