mirror of
https://github.com/welton89/RRBEC.git
synced 2026-04-05 05:25:40 +00:00
55 lines
1.8 KiB
Python
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
|