Невозможно прочитать данные сеанса из базы данных

Я унаследовал унаследованное приложение django (в настоящее время на 2.2.24), которое я пытаюсь модернизировать шаг за шагом. Одним из требований является переход от MySQL к базе данных Azure SQL.

К сожалению, я столкнулся с проблемой, когда я просто не могу считать данные сессии из базы данных.

Вот как выглядит мой settings.py. Как вы можете видеть, django.contrib.sessions установлен, также как и django.contrib.sessions.middleware.SessionMiddleware. Также я явно установил SESSION_ENGINE = 'django.contrib.sessions.backends.db', который должен быть по умолчанию.

# ...
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'rest_framework_swagger',
    # ...
]
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',
    'simple_history.middleware.HistoryRequestMiddleware',
]
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
]
DATABASES = {
    'default': {
        'ENGINE': 'mssql', # https://github.com/microsoft/mssql-django
        'NAME': '<hiden>',
        'USER': '<hiden>',
        'PASSWORD': '<hiden>',
        'HOST': '<hiden>',
        'PORT': '1433,
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        }
    }
}
# ...

Вот как выглядит ошибочный views.py, который является частью процедуры входа в Azure AD (def auth(request) => sso/login & def complete(request) => sso/complete)

После выхода из def auth(request) я вижу новую запись в таблице dbo.django_session. Однако, когда выполнение входит в def complete(request), словарь сеанса пуст.

@never_cache
def auth(request):
    request.session.flush()
    
    nonce = str(uuid.uuid4())
    request.session['nonce'] = nonce # store to session db

    state = str(uuid.uuid4())
    request.session['state'] = state # store to session db

    backend = AzureActiveDirectoryBackend()
    redirect_uri = AZURE_AD_REDIRECT_URI or request.build_absolute_uri(reverse(complete))
    login_url = backend.login_url(
        nonce=nonce,
        state=state,
        redirect_uri=redirect_uri
    )

    if settings.DEBUG:
        print('login_url:', login_url)

    return HttpResponseRedirect(login_url)

@never_cache
@csrf_exempt
def complete(request):
    backend = AzureActiveDirectoryBackend()
    method = 'GET' if backend.RESPONSE_MODE == 'fragment' else 'POST' # form_post / fragment
    
    # EMPTY 
    keys = request.session.keys()
    items = request.session.items()

    # EMPTY AS WELL 
    original_state = request.session.get('state') # dictionary from SessionMiddleware

    resp_meta = getattr(request, method) # request.GET / request.POST
    state = resp_meta.get('state')

    if original_state != state:
        return HttpResponse('<h1>State is lost</h1>\n\nRefresh the page (F5).')

    if "error" in resp_meta:
        return HttpResponse('<h1>%s</h1> \n %s \n\n error_uri:<a>%s</a>' % (
            resp_meta['error'], resp_meta['error_description'], resp_meta['error_uri']))

    # ...

Что здесь происходит? Любая помощь в этом вопросе будет очень признательна!

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