_validation_handler в backend/app/main.py отдаёт в details только type, loc и msg каждой ошибки. Раньше он клал exc.errors() как есть, и это давало две проблемы:
для тела не в JSON (text/plain от HTML-формы) в input лежали сырые bytes, и ответ падал в 500;
тот же input возвращал клиенту тело запроса целиком, включая пароль из неполной формы входа.
ctx тоже убран: там бывают объекты исключений с той же проблемой сериализации. Конверт ошибки и код VALIDATION_ERROR прежние. Фронт details ошибок валидации не читает.
Коммиты
c0e162d Ошибка валидации: 422 без эха тела запроса вместо 500
Проверки
.\.venv\Scripts\python.exe -m pytest — 105 passed, из них 3 новых в tests/test_validation_errors.py. На старом обработчике 2 из 3 новых падают: TypeError: Object of type bytes is not JSON serializable и пароль в теле ответа.
curl на живом dev-бэкенде:
text/plain на /api/auth/telegram → 422 model_attributes_type, loc: ["body"];
{"password": "very-secret"} на /api/admin/auth/login → 422 missing по username, пароля в ответе нет.
Отклонения от плана
Нет.
С PR #53 (#24) не пересекается: main.py там не менялся.
## Что сделано
`_validation_handler` в `backend/app/main.py` отдаёт в `details` только `type`, `loc` и `msg` каждой ошибки. Раньше он клал `exc.errors()` как есть, и это давало две проблемы:
- для тела не в JSON (`text/plain` от HTML-формы) в `input` лежали сырые `bytes`, и ответ падал в 500;
- тот же `input` возвращал клиенту тело запроса целиком, включая пароль из неполной формы входа.
`ctx` тоже убран: там бывают объекты исключений с той же проблемой сериализации. Конверт ошибки и код `VALIDATION_ERROR` прежние. Фронт `details` ошибок валидации не читает.
## Коммиты
- `c0e162d` Ошибка валидации: 422 без эха тела запроса вместо 500
## Проверки
- `.\.venv\Scripts\python.exe -m pytest` — **105 passed**, из них 3 новых в `tests/test_validation_errors.py`. На старом обработчике 2 из 3 новых падают: `TypeError: Object of type bytes is not JSON serializable` и пароль в теле ответа.
- `curl` на живом dev-бэкенде:
- `text/plain` на `/api/auth/telegram` → 422 `model_attributes_type`, `loc: ["body"]`;
- `{"password": "very-secret"}` на `/api/admin/auth/login` → 422 `missing` по `username`, пароля в ответе нет.
## Отклонения от плана
Нет.
С PR #53 (#24) не пересекается: `main.py` там не менялся.
Closes #52
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01XfTsytzT6TojfmprRDKiV6
Если JSON-эндпойнт получал тело с Content-Type text/plain (так шлёт HTML-форма),
сервер отвечал 500. _validation_handler клал exc.errors() в details как есть, а в
input там лежало сырое тело типа bytes, которое JSONResponse не сериализует.
Затронуты все эндпойнты с телом, в том числе /api/auth/telegram и
/api/admin/auth/login. Запрос и раньше отклонялся, сессия не создавалась, но
вместо понятной 422 в логе появлялся трейсбек.
Тот же input возвращал клиенту тело запроса целиком. Неполная форма входа
отправляла пароль обратно в ответе 422, откуда он мог осесть в логах прокси и
инструментах отладки.
Теперь в details идут только type, loc и msg. input и ctx (там бывают объекты
исключений — та же проблема сериализации) в ответ не попадают. Конверт и код
VALIDATION_ERROR прежние, фронт details валидации не читает.
Тесты: text/plain на двух эндпойнтах даёт 422, пароль не возвращается, loc
по-прежнему указывает на поле. На старом коде первые два падают.
#52
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XfTsytzT6TojfmprRDKiV6
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Что сделано
_validation_handlerвbackend/app/main.pyотдаёт вdetailsтолькоtype,locиmsgкаждой ошибки. Раньше он клалexc.errors()как есть, и это давало две проблемы:text/plainот HTML-формы) вinputлежали сырыеbytes, и ответ падал в 500;inputвозвращал клиенту тело запроса целиком, включая пароль из неполной формы входа.ctxтоже убран: там бывают объекты исключений с той же проблемой сериализации. Конверт ошибки и кодVALIDATION_ERRORпрежние. Фронтdetailsошибок валидации не читает.Коммиты
c0e162dОшибка валидации: 422 без эха тела запроса вместо 500Проверки
.\.venv\Scripts\python.exe -m pytest— 105 passed, из них 3 новых вtests/test_validation_errors.py. На старом обработчике 2 из 3 новых падают:TypeError: Object of type bytes is not JSON serializableи пароль в теле ответа.curlна живом dev-бэкенде:text/plainна/api/auth/telegram→ 422model_attributes_type,loc: ["body"];{"password": "very-secret"}на/api/admin/auth/login→ 422missingпоusername, пароля в ответе нет.Отклонения от плана
Нет.
С PR #53 (#24) не пересекается:
main.pyтам не менялся.Closes #52
🤖 Generated with Claude Code
https://claude.ai/code/session_01XfTsytzT6TojfmprRDKiV6