Проблема сохранения сеанса между двумя проектами 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, так что, похоже, причина не в этом.
Сессии в базе данных не истекли. Сессии создаются для каждого браузера, но при повторном входе в систему сессия для соответствующего браузера перезаписывается, а не истекает срок действия других сессий (даты истечения остаются неизменными).