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

1""" 

2Sérialiseur personnalisé pour l'authentification JWT. 

3 

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. 

6 

7:module: authentication.serializers.jwt 

8""" 

9 

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 

14 

15class CustomTokenObtainPairSerializer(TokenObtainPairSerializer): 

16 """ 

17 Sérialiseur personnalisé pour l'obtention des tokens JWT. 

18 

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. 

21 

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 """ 

31 

32 def validate(self, attrs): 

33 """ 

34 Valide les identifiants et enrichit la réponse avec les données utilisateur. 

35 

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") 

44 

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.") 

52 

53 data = super().validate(attrs) 

54 data['role'] = user.role 

55 data['email'] = user.email 

56 return data