Files
RRBEC/login/serializers.py

55 lines
1.8 KiB
Python

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