12. Аутентификация
Аутентификация — один из ключевых аспектов любого production-приложения. tRPC предоставляет гибкие инструменты для реализации любой схемы аутентификации через механизм контекста и middleware.
Паттерн аутентификации в tRPC
Заголовок раздела «Паттерн аутентификации в tRPC»Стандартный паттерн состоит из трёх частей: во-первых, createContext читает токен/сессию из запроса и добавляет пользователя в контекст; во-вторых, middleware isAuthed проверяет наличие пользователя; в-третьих, protectedProcedure создаётся на основе publicProcedure с добавленным middleware.
JWT-аутентификация
Заголовок раздела «JWT-аутентификация»При использовании 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-запрос перед повторной попыткой.