← Auth / Security

Маршруты и редиректы

auth / security · workzone

Маршруты и редиректы: куда ведёт базовый URL и как распределяются роли. Механику входа (токены, хэширование, смена пароля) держит аутентификация — здесь только карта.

Гейт входа
GET / единый вход · базовый URL
1База пустая?
да · нет пользователей
/setup создание первого Owner
нет · есть пользователи
2Есть сессия?
нет · гость
/login форма входа
да · вошёл
3Роль аккаунта?
Единый SPA, роутинг по роли: обе оболочки — /admin и /chat — одно React-приложение. Админ-зона — отдельный lazy-чанк. Общий слой: auth / токены, дизайн-система, i18n. Гейт — клиентский редирект роутером.
Переходы с условиями-гардами
GUARD Deep-link гостем
защищённый маршрут /login?returnTo=<route> возврат на исходный
Запрос защищённого маршрута без сессии → редирект на форму входа с сохранением цели → после входа возврат на исходный маршрут. Приоритет у ?returnTo, если он разрешён роли. ?returnTo принимается только как локальный путь (начинается с одного /, но не // и не /\, без схемы и хоста) — иначе игнорируется, редирект идёт на дом по роли. Защита от open-redirect: внешний ?returnTo увёл бы после входа на фишинговый клон.
GUARD Временный пароль
must_change_password /change-password дальше по роли
Сразу после входа: если у аккаунта поднят must_change_password (выдан временный пароль) → принудительный редирект на /change-password, выход заблокирован, пока не задан постоянный пароль. Редирект — клиентский; настоящую границу держит сервер, прямой вызов API в обход экрана отклоняется — механика в модели данных. Флаг снят → распределение по роли (Q3 выше). Фича — Принудительная смена пароля.
GUARD Гард /admin/*
Member на /admin/* 403 Forbidden /chat
/admin/* — только Owner / Admin. Member на admin-маршруте → редирект на свой /chat: для известного дома роли тупика не создаём. Общий экран 403 «Доступ запрещён» — для прочих запрещённых deep-link'ов, где очевидного редиректа нет.
терминал отказа 403 Forbidden вошёл, но без прав → редирект на /chat