Files
h-school/docs/phases/38-session.md
T

3.1 KiB
Raw Blame History

Фаза 38. Сессия

Зависимости

Зачем

В клиент не пускает без пароля альфы и имени. Имя запоминается. Сокет открывается только после сессии. Школы пока общие — хозяин в фазе 39.

Задачи

  • HSchool:AlphaPassword в конфиге; пустая строка — процесс не стартует. В appsettings.json заглушка для локальной игры; headless AppHost задаёт тестовый пароль окружением
  • POST /api/session { password, userName }: неверный пароль — 401 bad-password; кривое имя — 400 invalid-name (те же правила, что у школы); имя с живым сокетом — 409 name-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/schools401; после POST /api/session200
  • Верный пароль и новое имя пишут users.json; повтор с тем же именем (другой регистр) — тот же человек, не вторая запись
  • Пока сокет имени жив, второй POST /api/session с ним — 409 name-online
  • Сокет без куки закрывается, Welcome не приходит
  • Клиентский тест: без куки виден ввод пароля, не сетка школ

Критерий готовности

  • Открыть клиент, ввести пароль и имя, попасть в меню; обновить страницу — снова меню, без формы
  • dotnet test и npm test / build проходят

Стоп

Не делить школы на мои/чужие. Не менять MaxSchools. Не трогать таблицу скоростей.