Fix session cookie parsing and autologin on type change - #1252
Open
KraPete wants to merge 1 commit into
Open
Conversation
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
KraPete
marked this pull request as ready for review
September 10, 2026 12:09
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 0 |
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что происходит; кому и зачем нужно:
Бэкенд разбирал заголовок
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