Пользователь Django Middleware всегда анонимен (REST, SimpleJWT)

Я использую Django REST Framework вместе с rest_framework_simplejwt и пытаюсь написать свое собственное промежуточное ПО, которое будет обновлять user.last_request каждый раз, когда пользователь выполняет одно действие.

from django.utils.timezone import now

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

    def __call__(self, request):
        if request.user.is_authenticated:
            request.user.last_request = now()
            request.user.save()
        response = self.get_response(request)
        return response```
But every time `user.is_authenticated` returns `False'

Самый простой способ, который я нашел для решения этой проблемы - это аутентификация пользователя внутри middleware вручную. Новый код выглядит следующим образом:

from django.utils.timezone import now
from rest_framework_simplejwt.authentication import JWTAuthentication


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

    def __call__(self, request):
        user = JWTAuthentication().authenticate(request)[0]

        if user:
            user = user[0]
            if user.is_authenticated:
                user.last_request = now()
                user.save(update_fields=['last_request'])
        response = self.get_response(request)
        return response

Это простое исправление, поэтому если вам нужна функциональность аутентификации пользователя во многих промежуточных программах, рассмотрите возможность использования отдельной AuthMiddleware для аутентификации SimpleJWT.

Вернуться на верх