Coverage for authentication\serializers\token.py: 94%
18 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
1"""
2Sérialiseur personnalisé pour l'authentification JWT.
4Ce module étend le sérialiseur JWT par défaut pour ajouter des informations
5spécifiques au rôle de l'utilisateur dans la réponse d'authentification.
7:module: authentication.serializers.jwt
8"""
10from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
11from django.contrib.auth import authenticate
12from rest_framework import serializers
13from users.models.base_user import User as CustomUser
15class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
16 """
17 Sérialiseur personnalisé pour l'obtention des tokens JWT.
19 Étend le sérialiseur JWT standard pour inclure le rôle et l'email
20 de l'utilisateur dans la réponse d'authentification.
22 :ivar access: Token d'accès JWT
23 :type access: str
24 :ivar refresh: Token de rafraîchissement JWT
25 :type refresh: str
26 :ivar role: Rôle de l'utilisateur (client, employe, admin)
27 :type role: str
28 :ivar email: Email de l'utilisateur authentifié
29 :type email: str
30 """
32 def validate(self, attrs):
33 """
34 Valide les identifiants et enrichit la réponse avec les données utilisateur.
36 :param attrs: Attributs contenant email et password
37 :type attrs: dict
38 :return: Données du token enrichies avec rôle et email
39 :rtype: dict
40 :raises serializers.ValidationError: Si les identifiants sont invalides ou manquants
41 """
42 email = attrs.get("email")
43 password = attrs.get("password")
45 if email and password:
46 user = authenticate(email=email, password=password)
47 if not user:
48 raise serializers.ValidationError("Identifiants invalides.")
49 assert isinstance(user, CustomUser)
50 else:
51 raise serializers.ValidationError("Email et mot de passe requis.")
53 data = super().validate(attrs)
54 data['role'] = user.role
55 data['email'] = user.email
56 return data