fix(auth-ui): тихий фейл 400 при смене пароля, валидация, пароль при создании
PLAN-user-password-fixes.md (инцидент 2026-09-07, user 55/56):
- toServiceError в client auth.service: BadRequestError → {success:false, error}
- полная клиентская валидация пароля в ProfilePasswordRow
- опциональный пароль при создании пользователя (UserModal + POST /api/users)
- onError с toast в PollCard/ReactionBar (этап 4)
- 11 новых тестов (129/129)
This commit is contained in:
@@ -514,3 +514,20 @@
|
||||
- Как проверялось: clone от deploy — OK; первый деплой новой схемы — ниже в этой записи.
|
||||
- Влияние на поиск/UX: нет.
|
||||
- Подводные камни: deploy-ключи GitHub нельзя шарить между репо (422) — у infra свой ключ; `.env` по-прежнему только на сервере; Traefik-метки/сеть n8n_proxy теперь версионируются в iistwin-infra.
|
||||
|
||||
---
|
||||
|
||||
## [внепланово] Тихий фейл 400 при смене пароля + UX установки пароля (PLAN-user-password-fixes.md)
|
||||
|
||||
- Статус: ✅ done (код), ⏳ этап 5 (операционный, user 55)
|
||||
- Зачем: инцидент 2026-09-07 — админ сменил пароль не тому пользователю (55 вместо 56), т.к. ошибка 400 с текстом правила не показывалась в UI, а после создания пользователя нет пути к установке пароля.
|
||||
- Что изменено:
|
||||
- `client/src/services/auth.service.ts` — хелпер `toServiceError`: BadRequestError/ConflictError → `{success:false, error}` (чистый текст сервера), сетевые → общий текст. Обернуты changeUserPassword/changePassword/createUser/updateUser/deleteUser. ОДИН фикс закрыл тихий фейл и в профиле, и в UserModal (вместо двух try/catch в компонентах из исходного плана).
|
||||
- `client/src/components/profile/ProfileFieldRow.tsx` — полная клиентская валидация пароля (длина + состав, тексты как у сервера) до отправки.
|
||||
- `client/src/components/UserModal.tsx` + `client/src/types/auth.types.ts` + `server/routes/auth.users.routes.ts` — опциональный пароль при создании пользователя (zod-валидация правил; пустое → временный как раньше).
|
||||
- `server/services/auth.service.ts` — catch в createUser пропускает текст правила пароля клиенту (раньше глотал).
|
||||
- Этап 4 (аудит тихих фейлов): исправлены FormAccessTab (5 мутаций), Automations (toggle), PollCard (3), ReactionBar — добавлен onError с toast; остальные ~20 мест проверены — не тихие.
|
||||
- `tests/password-flow.test.ts` — 11 тестов.
|
||||
- Как проверялось: vitest 129/129; check/lint/build чисто.
|
||||
- Влияние на поиск/UX: нет (только корректное отображение ошибок).
|
||||
- Подводные камни: часть правок ушла в параллельный коммит 0b2319b (ctx.tasks.sendMessage) — согласовано, потерь нет; apiRequest бросает BadRequestError на 400 — мутации с ожиданием {success:false} обязаны идти через сервисный слой с toServiceError.
|
||||
|
||||
Reference in New Issue
Block a user