============================= 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`` .. module:: src.module.identity.infrastructure.models :synopsis: Modèles Django pour le Identity Context User ==== .. class:: User(AbstractUser) Modèle utilisateur personnalisé avec email comme identifiant principal. .. attribute:: id :type: UUIDField Clé primaire UUID4. .. attribute:: email :type: EmailField(unique=True) Email de l'utilisateur (utilisé pour le login). .. attribute:: first_name :type: CharField .. attribute:: last_name :type: CharField .. attribute:: is_active :type: BooleanField .. attribute:: date_joined :type: DateTimeField Le champ ``username`` n'est **pas utilisé** pour l'authentification. L'email est le ``USERNAME_FIELD``. **Configuration requise dans settings.py :** .. code-block:: python AUTH_USER_MODEL = 'identity.User' UserManager =========== Module : ``src.module.identity.infrastructure.managers`` .. module:: src.module.identity.infrastructure.managers :synopsis: Manager personnalisé pour le modèle User .. class:: UserManager(BaseUserManager) Manager basé sur l'email (pas le username). .. method:: create_user(email, password=None, **extra_fields) -> User Crée un utilisateur standard. .. method:: create_superuser(email, password=None, **extra_fields) -> User Crée un superuser avec ``is_staff=True`` et ``is_superuser=True``. EmailVerification ================= .. class:: EmailVerification(models.Model) Token de vérification d'email. .. attribute:: user :type: ForeignKey → User .. attribute:: token :type: UUIDField(unique=True) .. attribute:: is_verified :type: BooleanField .. attribute:: created_at :type: DateTimeField .. attribute:: expires_at :type: DateTimeField Configurable via ``EMAIL_VERIFICATION_TOKEN_VALIDITY_HOURS``. OTPDevice ========= .. class:: 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 .. attribute:: user :type: ForeignKey → User .. attribute:: device_type :type: CharField ``"email"``, ``"totp"``, ``"static"`` .. attribute:: secret :type: CharField Secret partagé (TOTP) ou liste de codes (static). .. attribute:: is_confirmed :type: BooleanField ``True`` une fois que l'utilisateur a vérifié le dispositif. .. attribute:: is_active :type: BooleanField OTPChallenge ============ .. class:: OTPChallenge(models.Model) Code OTP temporaire pour les challenges email. .. attribute:: device :type: ForeignKey → OTPDevice .. attribute:: code :type: CharField .. attribute:: is_used :type: BooleanField .. attribute:: created_at :type: DateTimeField .. attribute:: expires_at :type: DateTimeField