Проблема сохранения сеанса между двумя проектами Django, использующими JWT и аутентификацию сеанса

Фон

Проект А

Система Legacy Django full-stack сервер на основе шаблонного языка Использование сессий для аутентификации Python версии 3.8 Django версии 3.2

Проект B

Новый проект Django RESTful API сервер на основе JSON Использование JWT и сессий для аутентификации Python версии 3.11 Django версии 5.0 База данных: MariaDB

В настоящее время мы переходим от старого проекта A к проекту B. В ходе этого процесса мы переключили метод аутентификации на JWT, но поскольку вся старая система еще не перенесена, мы сохраняем сессионный метод наряду с ним. Оба проекта используют UserenaAuthenticationBackend и используют django.contrib.auth.authenticate и django.contrib.auth.login для входа.

В этом состоянии пользователи могут входить в систему, используя либо проект A, либо проект B, которые используют одну и ту же базу данных. Возникают следующие проблемы:

КАК ЕСТЬ

  • Вход в A из одного браузера -> Вход в B из другого браузера -> Пользователь выходит из A в первом браузере.

  • Вход в B из одного браузера -> Вход в A из другого браузера -> Пользователь выходит из B в первом браузере.

  • Вход в A из одного браузера -> Вход в A из другого браузера -> Пользователь остается залогиненным в A в первом браузере.

  • Вход в B из одного браузера -> Вход в B из другого браузера -> Пользователь остается вошедшим в B в первом браузере.

-БУДУЩИЙ

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

Благоприятная часть

Сигнал SESSION_COOKIE_NAME унифицирован с тем же значением имени. Я подозревал, что эта проблема может быть связана с разницей версий, но кроме изменения формата session.encode в Django 4.0, которое было связано с изменением алгоритма по умолчанию на SHA1, никаких существенных изменений не произошло. И в проекте A, и в проекте B используется SHA256, так что, похоже, причина не в этом.

Сессии в базе данных не истекли. Сессии создаются для каждого браузера, но при повторном входе в систему сессия для соответствующего браузера перезаписывается, а не истекает срок действия других сессий (даты истечения остаются неизменными).

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