Создание SDK на базе фреймворка Node.js для Logto за считанные минуты
Узнайте, как создать пользовательский SDK для Logto, используя `@logto/node`.
Ранее в этой статье мы создали веб-SDK для Logto за считанные минуты. Теперь давайте сосредоточимся на Node.js, ещё одной популярной платформе для разработчиков на JavaScript.
В этом руководстве мы проведём вас через шаги по созданию простого SDK на базе Express для Logto, используя @logto/node. Этот SDK будет реализовывать поток входа, и вы сможете повторить те же шаги для создания SDK для любой другой платформы, основанной на Node.js, такой как Koa, Next.js, NestJS и т.д.
Поток входа
Прежде чем начать, давайте рассмотрим поток входа в Logto. Поток входа состоит из следующих шагов:
- Перенаправление на Logto: Пользователь перенаправляется на страницу входа в Logto.
- Аутентификация: Пользователь вводит свои учетные данные и аутентифицируется в Logto.
- Перенаправление обратно в ваше приложение: После успешной аутентификации пользователь перенаправляется обратно в ваше приложение с кодом авторизации.
- Обмен кода на токены: Ваше приложение обменивает код авторизации на токены и сохраняет их как состояние аутентификации.
Краткое введение в @logto/node
Подобно @logto/browser, пакет @logto/node предоставляет класс LogtoClient, который реализует основные функции Logto, включая методы для потока входа:
signIn(): Генерирует URL для авторизации OIDC и перенаправляет на него.handleSignInCallback(): Проверяет и анализирует URL-адрес обратного вызова, извлекает код авторизации и обменивает код на токены через конечную точку токенов.getContext(): Получает контекст текущего запроса на основе куки сессии, включая состояние аутентификации и информацию о пользователе.
Создание SDK для Express
В SDK мы предоставим два обработчика маршрутов (/sign-in и /sign-in-callback) вместе с middleware withLogto:
/sign-in: Обработчик маршрута, который инициирует поток входа с ответом, перенаправляющим на URL авторизации OIDC./sign-in-callback: Обработчик маршрута, который обрабатывает URL-адрес обратного вызова, обменивает код авторизации на токены, сохраняет их и завершает поток входа.- Middleware
withLogto: Middleware, который вызывает функциюgetContext()для получения контекста текущего запроса, включая состояние аутентификации и информацию о пользователе.
Для использования SDK вы можете просто добавить middleware в ваше приложени е на Express для защиты маршрутов и использовать обработчики маршрутов для запуска потока входа и обработки обратного вызова.
Шаг 1: Установка пакета
Сначала установите пакет @logto/node с помощью npm или других менеджеров пакетов:
Шаг 2: Подготовка адаптера хранения
Для инициализации экземпляра LogtoClient требуется адаптер хранения.
Предполагая, что пользователь SDK уже настроил сессию Express, мы можем просто реализовать класс Storage, создав новый файл storage.ts:
Шаг 3: Реализация обработчиков маршрутов
HTTP-запросы не сохраняют состояние, поэтому для каждого запроса нужно инициализировать экземпляр клиента. Давайте подготовим вспомогательную функцию для создания экземпляра клиента:
В этой функции мы реализуем адаптер navigate вместе с адаптером ExpressStorage. Адаптер navigate используется для перенаправления пользователя на URL авторизации.
Теперь давайте реализуем обработчики маршрутов, которые будут обёрнуты в функцию handleAuthRoutes:
- Обработчик маршрута
/auth/sign-inинициирует поток входа, вызываяsignIn(). Состояние входа сохраняется в сессии и будет использовано обработчиком маршрута/auth/sign-in-callback. - Обработчик маршрута
/auth/sign-in-callbackобрабатывает URL-адрес обратного вызова и обменивает код авторизации на токены, вызываяhandleSignInCallback(). Токены сохраняются в сессии адаптеромExpressStorage. После завершения обмена пользователь перенаправляется на главную страницу.

