Skip to content

Fix session cookie parsing and autologin on type change - #1252

Open
KraPete wants to merge 1 commit into
masterfrom
feature/fix-cookie-parsing-and-autologin
Open

Fix session cookie parsing and autologin on type change#1252
KraPete wants to merge 1 commit into
masterfrom
feature/fix-cookie-parsing-and-autologin

Conversation

@KraPete

@KraPete KraPete commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Что происходит; кому и зачем нужно:

Бэкенд разбирал заголовок Cookie через http.cookies.SimpleCookie, который молча
прекращает разбор на первой куке, которую не смог распознать. Это значение с {, "
или [ (обычная JSON-кука) либо кука с именем зарезервированного атрибута (path,
expires, domain и подобные). Куки не различают порты, поэтому такую куку может
поставить любое приложение на другом порту того же хоста. Браузер отдаёт куки в порядке
от старых к новым, так что после свежего логина наша id стоит в конце заголовка, за
чужой кукой, и теряется. Пользователь получает форму логина на каждой перезагрузке
страницы.

Заодно закрыт инвариант модели User: сеттер type сбрасывал autologin через
property-сеттер autologin, а тот игнорирует запись, когда тип уже не поддерживает
автологин. Сброс был no-op.


Что поменялось для пользователей:

Сессия переживает наличие посторонних кук в браузере, форма логина больше не появляется
на каждой перезагрузке.

При смене типа пользователя с user на operator или admin флаг автологина теперь
действительно снимается.


Как проверял/а:

Заголовок Cookie разбирается вручную: разбиение по ;, разделение каждой части по
первому =, сбор всех значений с именем ровно id. Кандидаты дедуплицируются и
ограничены восемью, чтобы длинный заголовок не превращался в неограниченное число
запросов к хранилищу сессий на каждый запрос. Побеждает первый кандидат, для которого
нашлась сессия.

Тесты: новые GetIdCookieValuesTest и GetSessionTest в backend/tests/main_test.py
на чужую JSON-куку перед id, куки с именами path и expires, дубли id,
дедупликацию, лимит кандидатов и 14-дневную протуху админской сессии. Новый
backend/tests/users_storage_test.py на get_autologin_user().

Пайплайн бэкенда прогнан целиком, isort, black, pylint 10.00/10, pytest 246 passed.


ИИ: текст подготовил ИИ-агент.
Модель: claude-opus-5 · Harness: Claude Code CLI 2.1.267 · Настройки: permission mode bypassPermissions
Запустил и отвечает за содержимое: @KraPete

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@KraPete
KraPete marked this pull request as ready for review September 10, 2026 12:09
@KraPete
KraPete requested a review from a team as a code owner September 10, 2026 12:09
@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 0 complexity

Metric Results
Complexity 0

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant