from rest_framework_simplejwt.serializers import TokenObtainPairSerializer from django.contrib.auth.models import User from rest_framework import serializers class UserSerializer(serializers.ModelSerializer): # Removido write_only=True para que o hash da senha seja enviado no GET password = serializers.CharField(required=False) class Meta: model = User fields = ['id', 'username', 'email', 'first_name', 'last_name', 'is_staff', 'is_active', 'groups', 'password'] read_only_fields = ['id', 'is_staff'] def create(self, validated_data): password = validated_data.pop('password', None) user = super().create(validated_data) if password: user.set_password(password) user.save() return user def update(self, instance, validated_data): password = validated_data.pop('password', None) user = super().update(instance, validated_data) if password: user.set_password(password) user.save() return user class MyTokenObtainPairSerializer(TokenObtainPairSerializer): @classmethod def get_token(cls, user): token = super().get_token(user) # Adicione campos personalizados ao token (payload) se desejar token['username'] = user.username token['groups'] = list(user.groups.values_list('name', flat=True)) return token def validate(self, attrs): data = super().validate(attrs) # Adicione informações do usuário na resposta do JSON data['user'] = { 'id': self.user.id, 'username': self.user.username, 'email': self.user.email, 'first_name': self.user.first_name, 'last_name': self.user.last_name, 'groups': list(self.user.groups.values_list('name', flat=True)) } return data