With DataBaseREdis

This commit is contained in:
2026-01-28 00:49:37 +03:00
parent 4b01c2d4de
commit af62de5569
10 changed files with 1309 additions and 24 deletions

106
AUTH_README.md Normal file
View File

@ -0,0 +1,106 @@
# Система авторизации и Leaderboard
## Описание
Игра теперь поддерживает систему авторизации/регистрации и глобальный рейтинг (Leaderboard) с использованием Redis в качестве базы данных.
## Режимы работы
### 1. Без Redis (для тестов)
По умолчанию приложение работает **без Redis**. Это позволяет тестировать игру без необходимости настройки базы данных.
**Как запустить без Redis:**
- Просто запустите `node server.js` или `npm start`
- Или установите переменную окружения: `USE_REDIS=false`
### 2. С Redis (для продакшена)
Для использования авторизации, регистрации и Leaderboard необходимо запустить Redis.
**Как запустить с Redis:**
#### Локально:
1. Установите Redis: `sudo apt-get install redis-server` (Debian/Ubuntu)
2. Запустите Redis: `redis-server`
3. Установите переменные окружения:
```bash
export USE_REDIS=true
export REDIS_URL=redis://localhost:6379
```
4. Запустите сервер: `node server.js`
#### Docker:
1. Используйте `docker-compose.yml` - Redis уже настроен
2. Запустите: `docker compose up -d`
3. Redis автоматически подключится
## Переменные окружения
Создайте файл `.env` на основе `.env.example`:
```bash
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` автоматически:
1. Останавливает Redis контейнер
2. Обновляет код из Git
3. Останавливает все контейнеры
4. Собирает образы
5. Запускает контейнеры (включая Redis)
**Использование:**
```bash
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** в правом верхнем углу лобби
- **Информация о пользователе** отображается в левом верхнем углу (если авторизован)