Аутентификация и база данных: обзор
Обзорно понимаем, куда в Next.js встраиваются логин и база данных, без привязки к конкретной библиотеке.
В Next.js доступ к базе данных и проверка аутентификации живут на сервере — в серверных компонентах, Server Actions и Route Handlers, где секреты и сессии не утекают в браузер.
Подключение базы данных
Строка подключения — это секрет, поэтому она в .env (без NEXT_PUBLIC_), а сам клиент БД создаётся в lib/ и используется только в серверном коде:
// lib/db.ts — выполняется только на сервере
import { connect } from "some-db-client";
export const db = connect(process.env.DATABASE_URL);
Запрос к БД делают в серверном компоненте (для чтения) или в Server Action (для записи). Популярные инструменты доступа к данным — Prisma и Drizzle; конкретный выбор — за пределами этого обзора.
Как устроена аутентификация
Логин в вебе обычно строится так:
| Шаг | Где в Next.js |
| Пользователь вводит логин/пароль | Форма + Server Action |
| Сервер проверяет и создаёт сессию | Server Action / Route Handler |
| Сессия хранится в cookie | HTTP-only cookie (недоступна JS) |
| Следующие запросы читают cookie | Серверный компонент / middleware |
Ключевая идея: проверка «кто это» делается на сервере, а признак сессии лежит в HTTP-only cookie, которую нельзя прочитать из браузерного JS — это защита от кражи токена.
Middleware для защиты маршрутов
Файл middleware.ts в корне выполняется до рендера и может, например, перенаправить неавторизованного пользователя на страницу входа. Логику решения смоделируем на JS:
function guard(path, isLoggedIn) {
const protectedPaths = ["/dashboard", "/settings"];
if (protectedPaths.some((p) => path.startsWith(p)) && !isLoggedIn) {
return "redirect:/login";
}
return "allow";
}
console.log(guard("/dashboard", false));
console.log(guard("/dashboard", true));
console.log(guard("/blog", false));
Вывод:
redirect:/login allow allow
Готовые решения
Писать аутентификацию с нуля рискованно. На практике берут проверенные библиотеки (например, Auth.js / NextAuth, или внешние сервисы вроде Clerk), которые закрывают сессии, OAuth и хранение паролей. Этот курс лишь обозначает, куда они встраиваются.
Итог
- Доступ к БД и проверка логина — только на сервере; строка подключения — секрет в
.env. - Сессию хранят в HTTP-only cookie, недоступной браузерному JavaScript.
middleware.tsзащищает маршруты до рендера; аутентификацию берут из проверенных библиотек.