tradein/auth 5: Frontend — login-форма + session-aware RouteGuard #2555

Open
opened 2026-07-30 06:21:34 +00:00 by lekss361 · 0 comments
Owner

Часть эпика #2549 (шаг 5/8). Блокирован: после #2552 (нужен живой /api/v1/auth/login). Worker: frontend-engineer.

Scope (tradein-mvp/frontend/src)

  • app/login/page.tsx (новый): форма username+password → POST /api/v1/auth/login, ошибки (401 неверные creds, 429 rate-limit), редирект назад на исходный роут.
  • lib/useMe.ts: Role union → "admin"|"manager"|"employee" + legacy "pilot"|"analyst"|"expired" (на dual-период).
  • components/auth/RouteGuard.tsx: 401 → редирект на /login (вместо NoAccessScreen variant="session"); ⚠️ учесть basePath /trade-in (usePathname() без basePath — см. существующий комментарий в файле).
  • lib/useLogout.ts (новый) + кнопка выхода в TopNav.

DoD

  • tsc/lint/build чистые. Playwright: неавторизованный визит → /login; валидные creds → назад + display_name в TopNav; logout сбрасывает.
  • UI Меры проверять на проде после мержа (RouteGuard локально без бекенда → return null) — правило tradein.

Что НЕ делать

Team-дашборд (шаг 6). Не трогать существующий NoAccessScreen trial-вариант (expired-экран остаётся).

Часть эпика #2549 (шаг 5/8). **Блокирован**: после #2552 (нужен живой `/api/v1/auth/login`). Worker: frontend-engineer. ## Scope (tradein-mvp/frontend/src) - `app/login/page.tsx` (новый): форма username+password → `POST /api/v1/auth/login`, ошибки (401 неверные creds, 429 rate-limit), редирект назад на исходный роут. - `lib/useMe.ts`: `Role` union → `"admin"|"manager"|"employee"` + legacy `"pilot"|"analyst"|"expired"` (на dual-период). - `components/auth/RouteGuard.tsx`: 401 → редирект на `/login` (вместо NoAccessScreen variant="session"); ⚠️ учесть basePath `/trade-in` (`usePathname()` без basePath — см. существующий комментарий в файле). - `lib/useLogout.ts` (новый) + кнопка выхода в TopNav. ## DoD - tsc/lint/build чистые. Playwright: неавторизованный визит → `/login`; валидные creds → назад + display_name в TopNav; logout сбрасывает. - UI Меры проверять на проде после мержа (RouteGuard локально без бекенда → return null) — правило tradein. ## Что НЕ делать Team-дашборд (шаг 6). Не трогать существующий NoAccessScreen trial-вариант (expired-экран остаётся).
lekss361 added the
auth
scope/frontend
tradein
labels 2026-07-30 06:23:37 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2555
No description provided.