3.7 KiB
3.7 KiB
Система авторизации и Leaderboard
Описание
Игра теперь поддерживает систему авторизации/регистрации и глобальный рейтинг (Leaderboard) с использованием Redis в качестве базы данных.
Режимы работы
1. Без Redis (для тестов)
По умолчанию приложение работает без Redis. Это позволяет тестировать игру без необходимости настройки базы данных.
Как запустить без Redis:
- Просто запустите
node server.jsилиnpm start - Или установите переменную окружения:
USE_REDIS=false
2. С Redis (для продакшена)
Для использования авторизации, регистрации и Leaderboard необходимо запустить Redis.
Как запустить с Redis:
Локально:
- Установите Redis:
sudo apt-get install redis-server(Debian/Ubuntu) - Запустите Redis:
redis-server - Установите переменные окружения:
export USE_REDIS=true export REDIS_URL=redis://localhost:6379 - Запустите сервер:
node server.js
Docker:
- Используйте
docker-compose.yml- Redis уже настроен - Запустите:
docker compose up -d - Redis автоматически подключится
Переменные окружения
Создайте файл .env на основе .env.example:
USE_REDIS=true # Использовать Redis (true/false)
REDIS_URL=redis://redis:6379 # URL Redis (для Docker: redis://redis:6379)
SESSION_SECRET=your-secret-key # Секретный ключ для сессий
PORT=3542 # Порт сервера
NODE_ENV=production # Окружение
Deploy.sh
Скрипт deploy.sh автоматически:
- Останавливает Redis контейнер
- Обновляет код из Git
- Останавливает все контейнеры
- Собирает образы
- Запускает контейнеры (включая Redis)
Использование:
chmod +x deploy.sh
./deploy.sh
API Endpoints
Регистрация
POST /api/register
Body: { username: string, password: string, email?: string }
Вход
POST /api/login
Body: { username: string, password: string }
Выход
POST /api/logout
Информация о пользователе
GET /api/user
Leaderboard
GET /api/leaderboard
Response: { leaderboard: [{ username, gamesPlayed, gamesWon, winRate, totalDamage, totalHealing }] }
Статистика игроков
Статистика автоматически обновляется при окончании игры:
gamesPlayed- количество сыгранных игрgamesWon- количество победtotalDamage- общий нанесенный уронtotalHealing- общее восстановленное здоровье
UI
- Модальное окно авторизации появляется при первом запуске
- Можно продолжить без авторизации (кнопка "Продолжить без авторизации")
- Кнопка Leaderboard в правом верхнем углу лобби
- Информация о пользователе отображается в левом верхнем углу (если авторизован)