Цей проект є серверною частиною (Backend) для системи автентифікації користувачів. Він забезпечує повний цикл керування обліковими записами, включаючи реєстрацію, підтвердження через електронну пошту, авторизацію та безпечне керування сесіями.
Проект реалізує надійну систему автентифікації на основі JSON Web Tokens (JWT). Основна мета — надати розробникам готовий каркас для інтеграції захищеного доступу до додатків. Система підтримує механізм "Access" та "Refresh" токенів, що дозволяє підтримувати сесію користувача активною без необхідності постійного введення пароля, зберігаючи при цьому високий рівень безпеки.
Для роботи додатка необхідно виконати два кроки:
-
Створення бази даних (вручну): Перед першим запуском сервера необхідно створити порожню базу даних у PostgreSQL. Ви можете зробити це за допомогою SQL-запиту:
CREATE DATABASE auth_db;
(Назва бази даних повинна збігатися зі значенням
DB_NAMEу вашому файлі.env). -
Створення таблиць (автоматично): Проект налаштований на автоматичну синхронізацію моделей із базою даних. При першому успішному підключенні Sequelize автоматично створить усі необхідні таблиці (
users,tokens), якщо вони ще не існують.
Додаток побудований за принципами багатошарової архітектури:
- Маршрутизація (Routes): Визначає доступні кінцеві точки (endpoints) для автентифікації (
/auth) та роботи з профілем користувача (/profile). - Контролери (Controllers): Обробляють вхідні HTTP-запити, валідують дані та передають їх до відповідних сервісів.
- Сервіси (Services): Містять основну бізнес-логіку: хешування паролів, генерацію токенів, взаємодію з базою даних та надсилання листів.
- Мідлвари (Middlewares): Захищають маршрути, перевіряючи наявність та валідність токенів у заголовках або куках запитів.
- Моделі (Models): Описують структуру даних у базі (користувачі та їхні токени).
Процес реєстрації включає створення запису в базі даних та надсилання токена активації на пошту користувача. Авторизація видає пару токенів: Access Token (короткостроковий, передається в тілі відповіді) та Refresh Token (довгостроковий, зберігається в HTTP-only cookie).
При розробці використовувався сучасний стек технологій для забезпечення швидкодії та типізації:
- Runtime: Node.js
- Мова програмування: TypeScript
- Фреймворк: Express.js
- База даних: PostgreSQL
- ORM: Sequelize (з sequelize-typescript для покращеної типізації)
- Безпека: bcrypt (хешування паролів), jsonwebtoken (JWT)
- Комунікації: Nodemailer (надсилання email)
- Інструменти розробки: Nodemon, ESLint, Prettier, Jest
- Встановлений Node.js (версія 18 або новіша)
- Встановлений та запущений PostgreSQL
- Створіть файл
.envу кореневій директорії проекту, скопіювавши вміст із.env.example. - Заповніть змінні середовища актуальними даними:
- Параметри підключення до БД (
DB_HOST,DB_USER,DB_PASSWORD,DB_NAME). - Секретні ключі для JWT (
JWT_ACCESS_SECRET,JWT_REFRESH_SECRET). - Дані вашого SMTP-сервера для надсилання листів.
- Параметри підключення до БД (
-
Встановіть залежності:
npm install
-
Запустіть сервер у режимі розробки:
npm run dev
-
Для продуктивного запуску виконайте збірку та старт:
npm run build npm start
Сервер буде доступний за адресою, вказаною в PORT (за замовчуванням http://localhost:5000).