Проверка request.user.is_authenticated не работает так, как ожидалось, для маршрутов, отличных от тех, что предоставляются Django Allauth

У меня проблема, когда request.user.is_authenticated возвращает false с валидным X-Session-Token, отправленным в заголовке, когда запрос отправляется к другой части приложения, кроме тех url, которые предоставляются allauth и headless. Я новичок в Django и фактически это мой первый Django проект. Возможно, я что-то упускаю, но не нашел решения в других местах.

Я использовал пользовательский пользователь через CustomAccountAdapter, который расширяет allauth.account.adapter.DefaultAccountAdapter, переопределив функцию save_user, основываясь на том, что я почерпнул из документации. Я определил пользовательскую токен-стратегию для генерации access_token и refresh token, скопировав реализацию session token из allauth:

from allauth.account.adapter import DefaultAccountAdapter
from users.models.user_profile import UserProfile
from allauth.account.utils import user_email, user_username

import json

class CustomAccountAdapter(DefaultAccountAdapter):
        
    def save_user(self, request, user, form, commit=True):     
        data = json.loads(request.body)
        email = data.get("email")
        username = data.get("username")
        user_email(user, email)
        user_username(user, username)
        if "password" in data:
            user.set_password(data["password"])
        else:
            user.set_unusable_password()
        self.populate_username(request, user)
        user.is_creator = data.get('is_creator', False)
        if commit:
            # Ability not to commit makes it easier to derive from
            # this adapter by adding
            user.save()
            if data.get('birth_date', False):
                UserProfile.objects.create(user=user, birth_date=data.get('birth_date', None))        
                        
        return user

У меня есть пользовательское промежуточное ПО, в котором я хочу заблокировать доступ неаутентифицированного запроса к некоторым шаблонам маршрутов, но промежуточное ПО не смогло получить запрос. Пользователь

from django.http import JsonResponse
from django.utils.deprecation import MiddlewareMixin

class BlockAnonymousUsersMiddleware(MiddlewareMixin):
    def process_request(self, request):
        print(request.user)
        protected_paths = ['/api/']
        for path in protected_paths:
            if request.path.startswith(path) and not request.user.is_authenticated:
                return JsonResponse({
                    'status': 401,
                    'errors': [{'message': 'Authentication required'}]
                })
Here is the middleware used in the app as contained in settings.py

 MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    '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',
    'allauth.account.middleware.AccountMiddleware',
    'users.middlewares.BlockAnonymousUsersMiddleware',
]

Моя CustomTokenStrategy, похоже, не является причиной, так как ее комментирование ничего не меняет

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