- 🔐 JWT аутентификация с безопасными httpOnly cookies
- 🗄️ PostgreSQL база данных с пулом соединений
- 🛡️ Хеширование паролей с использованием bcryptjs
- 📦 ES6 модули для современного JavaScript
- 🎯 Модульная архитектура для масштабируемости
- 🔒 Валидация входных данных и обработка ошибок
- 🍪 Сессии на основе cookies для безопасности
- 🚀 Конфигурация окружения с dotenv
- Среда выполнения: Node.js
- Фреймворк: Express.js
- База данных: PostgreSQL
- Аутентификация: JWT + bcryptjs
- Безопасность: httpOnly cookies, валидация входных данных
- Структура: ES6 модули, MVC паттерн
- Node.js (v16 или выше)
- PostgreSQL (v12 или выше)
- npm или yarn
git clone https://github.com/woookle/express-pg.git
cd express-pgnpm install-- Подключитесь к PostgreSQL и создайте базу данных
CREATE DATABASE auth_demo;
-- Создайте таблицы (выполните в базе данных auth_demo)
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
title VARCHAR(200) NOT NULL,
content TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);# Скопируйте файл окружения
cp .env.example .env
# Отредактируйте .env с вашей конфигурацией
nano .envПример файла .env:
NODE_ENV=development
PORT=3000
DB_USER=postgres
DB_HOST=localhost
DB_NAME=auth_demo
DB_PASSWORD=your_password
DB_PORT=5432
JWT_SECRET=your-super-secret-key-change-in-production
JWT_EXPIRES_IN=24h
COOKIE_MAX_AGE=86400000# Режим разработки
npm run dev
# Продакшен режим
npm start| Метод | Эндпоинт | Описание | Требуется аутентификация |
|---|---|---|---|
POST |
/api/auth/register |
Регистрация нового пользователя | ❌ |
POST |
/api/auth/login |
Вход пользователя | ❌ |
POST |
/api/auth/logout |
Выход пользователя | ✅ |
GET |
/api/auth/me |
Получить текущего пользователя | ✅ |
| Метод | Эндпоинт | Описание | Требуется аутентификация |
|---|---|---|---|
GET |
/api/users/dashboard |
Получить дашборд пользователя | ✅ |
PUT |
/api/users/profile |
Обновить профиль пользователя | ✅ |
| Метод | Эндпоинт | Описание |
|---|---|---|
GET |
/api/health |
Статус здоровья сервера |
POST /api/auth/register
Content-Type: application/json
{
"username": "ivanov",
"email": "ivan@example.com",
"password": "securepassword123"
}Ответ:
{
"success": true,
"message": "Пользователь успешно зарегистрирован",
"data": {
"user": {
"id": 1,
"username": "ivanov",
"email": "ivan@example.com",
"created_at": "2023-10-05T12:00:00.000Z"
}
}
}POST /api/auth/login
Content-Type: application/json
{
"email": "ivan@example.com",
"password": "securepassword123"
}Ответ:
{
"success": true,
"message": "Вход выполнен успешно",
"data": {
"user": {
"id": 1,
"username": "ivanov",
"email": "ivan@example.com",
"created_at": "2023-10-05T12:00:00.000Z"
}
}
}GET /api/auth/meОтвет:
{
"success": true,
"message": "Данные профиля успешно получены",
"data": {
"user": {
"id": 1,
"username": "ivanov",
"email": "ivan@example.com",
"created_at": "2023-10-05T12:00:00.000Z"
}
}
}express-pg/
├── config/
│ ├── database.js # Конфигурация PostgreSQL
│ └── constants.js # Переменные окружения
├── controllers/
│ ├── authController.js # Логика аутентификации
│ └── userController.js # Операции с пользователями
├── middleware/
│ ├── authMiddleware.js # JWT аутентификация
│ └── validationMiddleware.js # Валидация входных данных
├── routes/
│ ├── authRoutes.js # Маршруты аутентификации
│ └── userRoutes.js # Маршруты пользователей
├── utils/
│ └── bcrypt.js # Утилиты для паролей
├── app.js # Настройка Express приложения
├── server.js # Точка входа сервера
└── .env # Переменные окружения
npm run dev # Запуск сервера разработки с nodemon
npm start # Запуск продакшен сервера