Получить имя пользователя в промежуточном программном обеспечении из токена Django Rest Framework SIMPLE JWT (сторонняя организация) - PullRequest
0 голосов
/ 01 марта 2019

Я использую Django Rest Framework и включил сторонний пакет под названием REST framework simple JWT Auth , на который ссылается новый фреймворк, и этот, REST framework JWT Auth , который является старым (я представляю), поскольку долгое время не было обновлений на github и, возможно, не поддерживается для более новых версий.

И я ищунапример, ссылка на stackoverflow-3-й ответ через промежуточное ПО, чтобы получить информацию о пользователе для каждого запроса, чтобы применить / сохранить его, в случае необходимости, пользовательский объект в моих моделях, используя сигналы django.Я проверил в документации и в Интернете, но я ничего не нашел.Так что, если у вас уже был этот случай, я буду признателен за вашу помощь.

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 июля 2019

Чтобы получить имя пользователя из модели пользователя, вы должны использовать request.user.Это даст вам информацию аутентифицированного пользователя с запросом.Однако, если вы используете simple_jwt, невозможно напрямую использовать request.user в промежуточном программном обеспечении, поскольку механизм аутентификации работает в функции представления.

Таким образом, вы должны вручную выполнить аутентификацию внутри промежуточного программного обеспечения, а затем вы можете использовать request.user для получениялюбые данные из пользовательской модели.

from rest_framework_simplejwt import authentication


class MyMiddleware():
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        return response

    def process_view(self, request, view_func, view_args, view_kwargs):
        request.user = authentication.JWTAuthentication().authenticate(request)[0]  # Manually authenticate the token

        print(request.user)  # Use the request.user as you want
0 голосов
/ 01 марта 2019

Так что вас останавливает?Среда промежуточного программного обеспечения django хорошо задокументирована .Вам нужно следовать документам, и вы добьетесь того, чего хотите.Другими словами, вам нужно создать промежуточное программное обеспечение, которое принимает экземпляр запроса.Тогда вы сможете получить доступ к пользователю через request.user и делать с ним все, что захотите.

NB. Обязательно установите промежуточное ПО после AuthenticationMiddleware.

РЕДАКТИРОВАТЬ: На самом деле вы не можете получить аутентифицированного пользователя DRF через промежуточное ПО django, потому что аутентификация не выполняется "обычным" способом django.Таким образом, один из способов сделать это - создать Mixin, который переопределяет execute_authentication и использовать этот mixin во всех ваших APIView-ов, или вы можете просто расширить APIView и переопределить execute_authentication.

class CustomAPIView(APIView):
    def perform_authentication(self, request):
        request.user
        #Do what you like with the request.user
...