Добавление аутентификации логин/пароль #24
Notifications
Due Date
No due date set.
Blocks
#25 Пен тест
NotBigGhost/ForbiddenStarsApp
Reference: NotBigGhost/ForbiddenStarsApp#24
Reference in New Issue
Block a user
Нужно добавить вход в аккаунт через логин и пароль (телеграм остаётся как альтернативный вариант). Для новых пользователей предлагается основной вариант авторизации через логин с паролем, с возможностью прикрепить к нему телеграм. Должно быть два варианта поведения пользователя:
1: Пользователь создаёт аккаунт через телеграм, после чего приложение просит его придумать пароль для своего аккаунта. Логин - никнейм пользователя
2: Пользователь сначала вводит свой логин и пароль, регистрируясь в системе, после чего в настройках профиля при желании привязывает свой телегам аккаунт (ник при этом не меняется).
Для уже существующих пользователей при входе на сайт должно всплывать окно с уведомлением (если мне память не изменяет, у нас уже есть готовое всплывающее окно), в котором просят ввести новый пароль для своего аккаунта.
Сам по себе stub-вход уже реализован для дева, его просто нужно перенести на прод, изменив логику привязки к аккаунту под запрошенную выше, а следующей задачей убедиться в безопасности метода.
Смена аутентификации на логин/парольto Добавление аутентификации логин/парольПлан выполнения
Stub-вход в прод не переносится. Он пускает по нику без секрета, а dev-код не должен попадать в прод-артефакт. Поэтому в прод-путь добавляется отдельный вход по паролю (
backend/app/auth/password.py), stub остаётся только в dev. Колонкаusers.password_hashи провайдерlocalв схеме уже есть, миграция не нужна.POST /api/auth/registerиPOST /api/auth/login(ник и пароль);role='player';TOO_MANY_ATTEMPTS.PUT /api/users/me/password: если пароль уже задан, нужен текущий;POST /api/users/me/telegram: привязка по подписи виджета, ник не меняется, занятый Telegram даёт 409;MeReadновое полеhas_password.PUT /api/admin/users/{id}/password— задать пароль игроку. Это способ восстановить забытый пароль.Что ломается (Compat/Breaking)
password_hashигроков не читает.Вне рамок, для пен-теста #25: отзыв JWT после смены пароля, throttle на входе админа, распределённый перебор, 2FA.
Критерии готовности
pytestиnpm run buildзелёные.Ветка:
issue-24-login-passwordотdevРабота выполнена, открыт PR: #53
Итог: вход по нику и паролю стал основным во всех окружениях, Telegram остался вторым способом.
Проверки:
pytest— 128 passed, из них 26 новых.npm run buildзелёный, dev-строки в прод-бандл не попали.curlна живом dev-бэкенде: регистрация, вход, 429 после 5 неудач.Попутно: давняя ошибка — ответ 500 вместо 422 на тело не в JSON — вынесена в #52.
Статус:
Status/In ReviewОсталось за вами: ручной прогон форм входа, окна пароля и профиля, ревью и мёрж PR — задача закроется автоматически.