Пользователь 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.