3.1 KiB
3.1 KiB
Фаза 38. Сессия
Зависимости
Зачем
В клиент не пускает без пароля альфы и имени. Имя запоминается. Сокет открывается только после сессии. Школы пока общие — хозяин в фазе 39.
Задачи
HSchool:AlphaPasswordв конфиге; пустая строка — процесс не стартует. Вappsettings.jsonзаглушка для локальной игры; headless AppHost задаёт тестовый пароль окружениемPOST /api/session{ password, userName }: неверный пароль —401bad-password; кривое имя —400invalid-name(те же правила, что у школы); имя с живым сокетом —409name-online. Успех ставит HttpOnly-куку и при первом разе пишет имя вsaves/users.json(занятость без учёта регистра)GET /api/session— текущее имя или401.DELETE /api/sessionснимает куку- Все игровые HTTP без куки —
401. Живут без неё:/healthи три ручки сессии - WebSocket без куки не шлёт Welcome, закрывается. Hello по-прежнему версия + локаль
- Клиент: шаг пароля, шаг имени; при живой куке оба пропускаются. Сокет — после сессии. Кнопка выхода на меню
- Хостовые тесты логинятся в общем месте (
ResetAsyncили рядом), не в каждом факте docs/protocol.md— HTTP сессии в том же коммите. Раскладку сокета и версию не трогать
Тесты, без которых фаза не закрыта
- Без сессии
GET /api/schools—401; послеPOST /api/session—200 - Верный пароль и новое имя пишут
users.json; повтор с тем же именем (другой регистр) — тот же человек, не вторая запись - Пока сокет имени жив, второй
POST /api/sessionс ним —409name-online - Сокет без куки закрывается, Welcome не приходит
- Клиентский тест: без куки виден ввод пароля, не сетка школ
Критерий готовности
- Открыть клиент, ввести пароль и имя, попасть в меню; обновить страницу — снова меню, без формы
dotnet testиnpm test/buildпроходят
Стоп
Не делить школы на мои/чужие. Не менять MaxSchools. Не трогать таблицу скоростей.