Изменение пользователя по умолчанию при использовании REST-фреймворка JWT
У меня есть проксированная модель пользователя:
class TheDude(User):
class Meta:
proxy = True
И я использую Django REST framework JWT, чтобы сделать JWT auth в REST API.
Я хотел бы получить объект пользователя из запроса, но в настоящее время это объект User. Поскольку он проксируется, я не могу использовать AUTH_USER_MODEL
. Я пытался сделать компонент промежуточного ПО, чтобы переопределить пользователя в запросе, но он не установлен на этом этапе. Я также пробовал использовать JWT_RESPONSE_PAYLOAD_HANDLER
, но моя функция не вызывается, поэтому я не могу установить его и там.
Если я хочу иметь возможность получать объект TheDude
при вызове request.user
вместо User
в моих представлениях, как мне это сделать при аутентификации с помощью библиотеки REST framework JWT Auth?
Должна быть возможность использовать прокси-модель, переопределив класс аутентификации JWTAuthentication
и установив вашу прокси-модель пользователя в качестве user_model
следующим образом:
from rest_framework_simplejwt.authentication import JWTAuthentication
class MyCustomJWTAuthentication(JWTAuthentication):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.user_model = TheDude
Допустим, вы добавили этот класс на myapp/authentication.py
, затем вы можете применить этот пользовательский класс аутентификации как один из классов аутентификации по умолчанию в настройках REST_FRAMEWORK
:
REST_FRAMEWORK = {
...
'DEFAULT_AUTHENTICATION_CLASSES': (
'myapp.authentication.MyCustomJWTAuthentication',
...
)
...
}
Или просто примените его к определенным видам, которые вы хотите:
from myapp.authentication import MyCustomJWTAuthentication
class CertainAPIViewThatNeedsTheDude(APIView):
authentication_classes = (MyCustomJWTAuthentication, )
Это в свою очередь должно дать вам request.user
, который является TheDude
экземпляром.