Django RF simplejwt возвращает только токен, а не пользовательский объект

У меня есть приложение React и магазин Redux. Сейчас работаю над аутентификацией. Мой бэкэнд находится на Django RF, а для аутентификации JWT я использую библиотеку simplejwt. Дело в том, что эта библиотека имеет стандартное представление (/токен), которое возвращает токен JWT в случае успеха.

Проблема в том, что мне нужно иметь пользовательский объект в моем приложении после успешной аутентификации. Поэтому, когда пользователь входит в систему, он возвращает только токен. Но мне нужно перенаправить пользователя на свою страницу, если он вошел в систему.

Я уверен, что могу переопределить это представление /token и вернуть любой объект, который захочу, но почему это реализовано именно так прямо сейчас?


person Константин Манойло    schedule 22.09.2020    source источник
comment
Токен возвращается, чтобы клиент (например, ваше приложение React) мог использовать его для выполнения аутентифицированных запросов. Это отвечает на ваш вопрос?   -  person D Malan    schedule 07.10.2020
comment
Мне нужно, чтобы экземпляр пользователя хранился в магазине Redux. Вероятно, я могу использовать только токен и получить экземпляр пользователя из request.user дальше в приложении, но мне нужна некоторая информация о пользователе для отображения на странице, например электронная почта, имя и т. д. Поэтому я чувствую, что возврат его один раз после успешного входа в систему - лучшее решение здесь. Я написал, как я это реализовал.   -  person Константин Манойло    schedule 08.10.2020


Ответы (1)


Похоже, нет другого способа переопределить метод validate() в serializers.py следующим образом:

class UserTokenObtainPairSerializer(TokenObtainPairSerializer):
    def validate(self, attrs):
        data = {
            'token': super().validate(attrs),
            'id': self.user.id,
            'email': self.user.email,
            'name': self.user.name,
        }
        return data
person Константин Манойло    schedule 08.10.2020