Identity — Modèles

Les modèles du Identity Context gèrent les utilisateurs, la vérification d’email et les dispositifs OTP.

Module : src.module.identity.infrastructure.models

User

class src.module.identity.infrastructure.models.User(AbstractUser)

Modèle utilisateur personnalisé avec email comme identifiant principal.

id: UUIDField

Clé primaire UUID4.

email: EmailField(unique=True)

Email de l’utilisateur (utilisé pour le login).

first_name: CharField
last_name: CharField
is_active: BooleanField
date_joined: DateTimeField

Le champ username n’est pas utilisé pour l’authentification. L’email est le USERNAME_FIELD.

Configuration requise dans settings.py :

AUTH_USER_MODEL = 'identity.User'

UserManager

Module : src.module.identity.infrastructure.managers

class src.module.identity.infrastructure.managers.UserManager(BaseUserManager)

Manager basé sur l’email (pas le username).

create_user(email, password=None, **extra_fields) User

Crée un utilisateur standard.

create_superuser(email, password=None, **extra_fields) User

Crée un superuser avec is_staff=True et is_superuser=True.

EmailVerification

class src.module.identity.infrastructure.managers.EmailVerification(models.Model)

Token de vérification d’email.

user: ForeignKey User
token: UUIDField(unique=True)
is_verified: BooleanField
created_at: DateTimeField
expires_at: DateTimeField

Configurable via EMAIL_VERIFICATION_TOKEN_VALIDITY_HOURS.

OTPDevice

class src.module.identity.infrastructure.managers.OTPDevice(models.Model)

Dispositif OTP/2FA pour un utilisateur. Supporte 3 types :

  • email : Code envoyé par email

  • totp : TOTP RFC 6238 (Google Authenticator, Authy)

  • static : Codes de récupération à usage unique

user: ForeignKey User
device_type: CharField

"email", "totp", "static"

secret: CharField

Secret partagé (TOTP) ou liste de codes (static).

is_confirmed: BooleanField

True une fois que l’utilisateur a vérifié le dispositif.

is_active: BooleanField

OTPChallenge

class src.module.identity.infrastructure.managers.OTPChallenge(models.Model)

Code OTP temporaire pour les challenges email.

device: ForeignKey OTPDevice
code: CharField
is_used: BooleanField
created_at: DateTimeField
expires_at: DateTimeField