Перейти к содержимому

12. Аутентификация

Аутентификация — один из ключевых аспектов любого production-приложения. tRPC предоставляет гибкие инструменты для реализации любой схемы аутентификации через механизм контекста и middleware.

Стандартный паттерн состоит из трёх частей: во-первых, createContext читает токен/сессию из запроса и добавляет пользователя в контекст; во-вторых, middleware isAuthed проверяет наличие пользователя; в-третьих, protectedProcedure создаётся на основе publicProcedure с добавленным middleware.

При использовании JWT: клиент отправляет токен в заголовке Authorization: Bearer <token>. Функция createContext декодирует токен через jwt.verify() и добавляет декодированные данные пользователя в контекст.

При использовании сессий (например, через NextAuth.js): createContext вызывает getServerSession() или читает cookie сессии и получает объект пользователя из базы данных. Этот объект становится доступен через ctx.session.user.

Помимо проверки аутентификации, можно реализовать ролевую авторизацию. Создайте middleware isAdmin, который дополнительно проверяет ctx.user.role === 'admin' и выбрасывает ошибку FORBIDDEN при недостатке прав.

Для автоматического обновления JWT-токенов используйте link на клиенте, который перехватывает ошибки UNAUTHORIZED и выполняет refresh-запрос перед повторной попыткой.