Полнофункциональное Next.js приложение, демонстрирующее управление сессиями на основе Redis с аутентификацией пользователей. Этот проект демонстрирует полную систему аутентификации с регистрацией, входом, управлением сессиями и безопасным выходом из системы.
- Аутентификация пользователей: Полная система входа и регистрации с хешированием паролей
- Хранение сессий в Redis: Безопасное управление сессиями с использованием Redis с TTL 7 дней
- Безопасность: HttpOnly cookies, хеширование паролей, валидация входных данных
- Современный UI: Чистый, адаптивный интерфейс с Tailwind CSS
- В реальном времени: Мгновенная валидация сессий и управление состоянием
- TypeScript: Полная типизация во всем приложении
- Фронтенд: Next.js 15, React 19, TypeScript, Tailwind CSS
- Бэкенд: Next.js API Routes (App Router)
- База данных: Redis (для хранения сессий)
- Аутентификация: bcrypt для хеширования паролей, сессии на основе cookies
- Валидация: Zod для валидации входных данных
- Среда выполнения: Node.js (API routes) + Edge Runtime (middleware)
- Node.js 18+
- Работающий Redis сервер локально
-
Клонируйте и установите
git clone <repository-url> cd managed-redis-sessions-management-lab npm install
-
Настройте окружение
cp env.example .env.local
Отредактируйте
.env.local
и установите ваш Redis URL:REDIS_URL=redis://localhost:6379
-
Используйте Managed Redis или Запустите Redis локально с docker (выберите один вариант):
docker run -d -p 6379:6379 redis:alpine
-
Запустите приложение
npm run dev
-
Откройте браузер
Перейдите по адресу http://localhost:3000
-
Зарегистрируйте новый аккаунт
- Посетите http://localhost:3000
- Нажмите "Need an account? Register"
- Введите ваш email и пароль (минимум 6 символов)
- Нажмите "Register"
-
Войдите с существующим аккаунтом
- Введите ваш email и пароль
- Нажмите "Login"
-
Управление сессиями
- Сессии сохраняются при обновлении страницы
- Автоматическая валидация сессий при каждом запросе
- Безопасный выход с очисткой сессии
-
Выход
- Нажмите кнопку "Logout" когда вы вошли в систему
- Сессия немедленно удаляется из Redis
- Хранение: Сессии хранятся в Redis с ключами
sess:{uuid}
- TTL: Автоматическое истечение через 7 дней
- Безопасность: UUID-основанные ID сессий, HttpOnly cookies
- Валидация: Проверка сессий в реальном времени через API
POST /api/register
- Регистрация пользователей с хешированием паролейPOST /api/login
- Аутентификация пользователей и создание сессииPOST /api/logout
- Уничтожение сессии и очистка cookiesGET /api/me
- Валидация текущей сессии пользователя
- Область: Обрабатывает только маршрут
/api/me
для валидации сессий - Функция: Извлекает ID сессии из cookies и передает в API
- Безопасность: Предотвращает проблемы совместимости с Edge Runtime
- Хеширование паролей: bcrypt с 10 раундами соли
- Cookies сессий: HttpOnly, SameSite=Lax, maxAge 7 дней
- Валидация входных данных: Валидация схемы Zod для всех входных данных
- Обработка ошибок: Корректные ответы об ошибках без утечки данных
├── app/ # Next.js App Router
│ ├── api/ # API маршруты
│ │ ├── login/ # Эндпоинт аутентификации
│ │ ├── logout/ # Уничтожение сессии
│ │ ├── me/ # Валидация сессии
│ │ └── register/ # Регистрация пользователей
│ ├── globals.css # Tailwind CSS стили
│ ├── layout.tsx # Корневой компонент макета
│ └── page.tsx # Главная страница приложения
├── src/
│ ├── lib/ # Основные утилиты
│ │ ├── redis.ts # Управление подключением к Redis
│ │ ├── session.ts # CRUD операции с сессиями
│ │ └── user.ts # Управление пользователями и аутентификация
│ ├── components/ # React компоненты (устаревшие)
│ └── hooks/ # Пользовательские React хуки (устаревшие)
├── middleware.ts # Next.js middleware
├── env.example # Шаблон переменных окружения
└── package.json # Зависимости и скрипты
npm run dev
- Запуск сервера разработки с Turbopacknpm run build
- Сборка для продакшенаnpm run start
- Запуск продакшен сервераnpm run lint
- Запуск ESLintnpm run docker:build
- Сборка Docker образа
- Пользователь отправляет форму входа/регистрации
- API валидирует учетные данные и создает сессию в Redis
- Устанавливается HttpOnly cookie с ID сессии
- Middleware извлекает ID сессии для запросов
/api/me
- Сессия валидируется против Redis при каждом запросе
- Автоматическая очистка при выходе или истечении TTL
- Состояние сессии на клиенте управляется с помощью React хуков
- Валидация сессий в реальном времени при загрузке страницы
- Автоматические обновления UI на основе статуса аутентификации
- Обработка ошибок для сетевых и валидационных сбоев
-
Сборка Docker образа
npm run docker:build
-
Запуск контейнера
docker run -p 3000:3000 -e REDIS_URL=redis://your-redis-host:6379 evo-managed-redis-sessions-management-lab
- Настройте экземпляр Redis и получите URL подключения
- Добавьте
REDIS_URL
в переменные окружения - Соберите и разверните:
npm run build && npm start
- Убедитесь, что управление сессиями работает в продакшене
MIT License - свободно используйте этот проект для обучения и разработки.
Это учебный проект, демонстрирующий управление сессиями Redis с Next.js. Не стесняйтесь форкать, экспериментировать и улучшать реализацию!