Django rest framework custom Token (отправка объекта User с токеном доступа и рефреша)
Я пытаюсь создать пользовательский токен для отправки объекта пользователя вместе с доступом и обновлением.
token_serializer.py
from rest_framework_simplejwt.serializers import (
TokenObtainSerializer,
RefreshToken,
api_settings,
update_last_login,
)
from django.core import serializers
from app.models.user import AppUser
class TokenSerializer(TokenObtainSerializer):
@classmethod
def get_token(cls, user):
return RefreshToken.for_user(user)
def validate(self, attrs):
data = super().validate(attrs)
refresh = self.get_token(self.user)
data["refresh"] = str(refresh)
data["access"] = str(refresh.access_token)
serialized_app_user = serializers.serialize("json", Appuser)
app_user = serialized_app_user .objects.filter(pk=self.user.id).first()
if app_user:
data["user"] = app_user
else:
data["user"] = None
if api_settings.UPDATE_LAST_LOGIN:
update_last_login(None, self.user)
return data
token_view.py
from rest_framework_simplejwt.views import TokenViewBase
from app.api.serializers import TokenSerializer
class TokenView(TokenViewBase):
serializer_class = TokenSerializer
Этот код привел к этой ошибке: 'ModelBase' object is not iterable
Должен ли я добавить queryset в класс представления? Если да, то какую модель я должен добавить?
Если вам действительно нужна информация о пользователе в конечной точке получения токена, то вам нужно сериализовать объект AppUser
:
...
from rest_framework import serializers
from app.models.user import AppUser
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = AppUser
fields = '__all__' # or any specific fields
class TokenSerializer(TokenObtainSerializer):
def validate(self, attrs):
...
app_user = serialized_app_user .objects.filter(pk=self.user.id).first()
if app_user:
data["user"] = UserSerializer(app_user).data
else:
data["user"] = None