Django "CSRF Failed: CSRF cookie не установлен.", когда я изменяю request.user в моем пользовательском промежуточном ПО.

Это мое пользовательское промежуточное ПО. Ошибка CSRF возникает только из-за request.user = SimpleLazyObject(lambda: request_user). Пожалуйста, помогите мне исправить это

Пользовательское промежуточное ПО:

import jwt
from django.utils.functional import SimpleLazyObject
from django.contrib.auth import get_user_model


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

    def __call__(self, request):
        token = request.COOKIES.get('jwt')
        if not token:
            token_header = request.headers.get('Authorization')
            if not token_header:
                return self.get_response(request)
            if 'Bearer ' in token_header:
                token = token_header.split('Bearer ')[1]

        try:
            decoded = jwt.decode(token, 'secret', algorithms=['HS256'])
        except jwt.ExpiredSignatureError:
            return self.get_response(request)
        
        user_id = decoded.get('id')
        if user_id:
            User = get_user_model()
            request_user = User.objects.get(pk=user_id)
            request.user = SimpleLazyObject(lambda: request_user) # i get CSRF Failed: CSRF cookie not set when i change the request.user, fix this

        response = self.get_response(request)
        return response

Настройки промежуточных устройств:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'myauth.middlewares.JWTAuthentication',
]

Я попробовал закомментировать модификацию request.user, и CSRF не возвращает ошибку. Я также попробовал включить X-Csrftoken в заголовки в postman, и он работает хорошо, но он не работает, когда я использую axios, хотя я включил X-Csrftoken в заголовки, и на вкладке сетей было показано, что он был отправлен как заголовок.

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