Product / Full stack / Урок 05

PostgreSQL, Redis и авторизация

Добавляем данные, безопасные сессии и пользовательский кабинет.

Видео · 1:04Материалы · 14 минутРусскийОбновлён 02 августа 2026
Для кого
Разработчики приложений с аккаунтами, личными данными и серверными сессиями.
Перед началом
Рабочий API и понимание пользовательских ролей.
01:04 Озвучка · встроенный текст

Моё обучение

Прогресс и заметка

Войдите, чтобы сохранять прогресс, закладки и личные заметки.

Войти

Материалы / 14 минут

Разделить постоянные данные, временные сессии и правила доступа без хранения секретов в браузере.

01

Каждое хранилище решает свою задачу

PostgreSQL хранит пользователей, продуктовые сущности и историю, которую нельзя потерять после истечения TTL. Redis хранит короткоживущую серверную сессию и быстро проверяет её на каждом запросе.

Браузер получает только случайный непрозрачный идентификатор. Email, роль и другие данные сессии не должны быть закодированы в доступном JavaScript токене.

02

Сессия — это жизненный цикл

При входе создаётся новый идентификатор, старые токены не переиспользуются. Cookie получает HttpOnly, Secure и подходящий SameSite. В Redis задаётся TTL, а выход удаляет серверную запись.

Для выхода со всех устройств храните индекс активных сессий пользователя. Смена пароля и удаление аккаунта должны инвалидировать весь индекс.

  • Сравнивайте пароль только через адаптивный password hash.
  • Не сообщайте, существует ли email, в восстановлении доступа.
  • Защищайте изменяющие запросы от CSRF и проверяйте Origin.
03

Схема меняется миграциями

Миграция должна быть повторяемой, ограниченной одной задачей и применяться до запуска версии, которая зависит от новой схемы.

Индексы добавляются под измеренный запрос. Уникальные ограничения и внешние ключи фиксируют инварианты ближе к данным, а не только в handler.

Минимальная таблица пользователей sql
CREATE TABLE users (
  id uuid PRIMARY KEY,
  email text NOT NULL UNIQUE,
  password_hash text NOT NULL,
  created_at timestamptz NOT NULL DEFAULT now()
);

-- Redis: session:<random-id> -> user id + expiry

Практика

Проведите сессию через полный цикл

Реализуйте регистрацию, вход, проверку сессии, выход и инвалидирование всех устройств.

  1. 01

    Создайте миграцию пользователей без изменения существующих таблиц.

  2. 02

    Сохраните сессию в Redis с TTL и случайным идентификатором.

  3. 03

    Установите защищённую HttpOnly cookie.

  4. 04

    Добавьте тесты истечения TTL, logout и logout-all.

Критерии готовности

  • Пароль никогда не хранится и не логируется открытым текстом.
  • Cookie недоступна JavaScript и передаётся только по HTTPS.
  • Logout удаляет серверную сессию.
  • Миграции и ограничения базы воспроизводимы.