fix: refresh token

This commit is contained in:
N3WT DE COMPET
2025-05-02 18:28:26 +02:00
parent 4a382d523c
commit 053d524a51

View File

@ -215,6 +215,39 @@ class LoginView(APIView):
'errorMessage': retour, 'errorMessage': retour,
}, safe=False, status=status.HTTP_400_BAD_REQUEST) }, safe=False, status=status.HTTP_400_BAD_REQUEST)
def makeToken(user):
"""
Fonction pour créer un token JWT pour l'utilisateur donné.
"""
try:
# Récupérer tous les rôles de l'utilisateur actifs
roles = ProfileRole.objects.filter(profile=user, is_active=True).values('role_type', 'establishment__id', 'establishment__name')
# Générer le JWT avec la bonne syntaxe datetime
access_payload = {
'user_id': user.id,
'email': user.email,
'roleIndexLoginDefault':user.roleIndexLoginDefault,
'roles': list(roles),
'type': 'access',
'exp': datetime.utcnow() + settings.SIMPLE_JWT['ACCESS_TOKEN_LIFETIME'],
'iat': datetime.utcnow(),
}
access_token = jwt.encode(access_payload, settings.SIMPLE_JWT['SIGNING_KEY'], algorithm=settings.SIMPLE_JWT['ALGORITHM'])
# Générer le Refresh Token (exp: 7 jours)
refresh_payload = {
'user_id': user.id,
'type': 'refresh',
'exp': datetime.utcnow() + settings.SIMPLE_JWT['REFRESH_TOKEN_LIFETIME'],
'iat': datetime.utcnow(),
}
refresh_token = jwt.encode(refresh_payload, settings.SIMPLE_JWT['SIGNING_KEY'], algorithm=settings.SIMPLE_JWT['ALGORITHM'])
return access_token, refresh_token
except Exception as e:
logger.error(f"Erreur lors de la création du token: {str(e)}")
return None
class RefreshJWTView(APIView): class RefreshJWTView(APIView):
@swagger_auto_schema( @swagger_auto_schema(
operation_description="Rafraîchir le token d'accès", operation_description="Rafraîchir le token d'accès",
@ -277,7 +310,7 @@ class RefreshJWTView(APIView):
if not user: if not user:
return JsonResponse({'errorMessage': 'Utilisateur non trouvé'}, status=404) return JsonResponse({'errorMessage': 'Utilisateur non trouvé'}, status=404)
new_access_payload, new_refresh_token = makeToken(user) new_access_token, new_refresh_token = makeToken(user)
return JsonResponse({'token': new_access_token, 'refresh': new_refresh_token}, status=200) return JsonResponse({'token': new_access_token, 'refresh': new_refresh_token}, status=200)
@ -291,39 +324,6 @@ class RefreshJWTView(APIView):
logger.error(f"Erreur inattendue: {str(e)}") logger.error(f"Erreur inattendue: {str(e)}")
return JsonResponse({'errorMessage': f'Erreur inattendue: {str(e)}'}, status=400) return JsonResponse({'errorMessage': f'Erreur inattendue: {str(e)}'}, status=400)
def makeToken(user):
"""
Fonction pour créer un token JWT pour l'utilisateur donné.
"""
try:
# Récupérer tous les rôles de l'utilisateur actifs
roles = ProfileRole.objects.filter(profile=user, is_active=True).values('role_type', 'establishment__id', 'establishment__name')
# Générer le JWT avec la bonne syntaxe datetime
access_payload = {
'user_id': user.id,
'email': user.email,
'roleIndexLoginDefault':user.roleIndexLoginDefault,
'roles': list(roles),
'type': 'access',
'exp': datetime.utcnow() + settings.SIMPLE_JWT['ACCESS_TOKEN_LIFETIME'],
'iat': datetime.utcnow(),
}
access_token = jwt.encode(access_payload, settings.SIMPLE_JWT['SIGNING_KEY'], algorithm=settings.SIMPLE_JWT['ALGORITHM'])
# Générer le Refresh Token (exp: 7 jours)
refresh_payload = {
'user_id': user.id,
'type': 'refresh',
'exp': datetime.utcnow() + settings.SIMPLE_JWT['REFRESH_TOKEN_LIFETIME'],
'iat': datetime.utcnow(),
}
refresh_token = jwt.encode(refresh_payload, settings.SIMPLE_JWT['SIGNING_KEY'], algorithm=settings.SIMPLE_JWT['ALGORITHM'])
return access_token, refresh_token
except Exception as e:
logger.error(f"Erreur lors de la création du token: {str(e)}")
return None
@method_decorator(csrf_protect, name='dispatch') @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch')
class SubscribeView(APIView): class SubscribeView(APIView):