Создание 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
. После завершения обмена пользователь перенаправляется на главную страницу.
Шаг 4: Реализация middleware
Middleware withLogto
используется для защиты маршрутов. Оно вызывает getContext()
для получения контекста текущего запроса, включая состояние аутентификации и информацию о пользователе.
Функция getContext
использует адаптер хранилища для получения токенов из сессии.
Контрольная точка: использование SDK
Теперь, когда вы создали SDK на базе Express для Logto, вы можете использовать его в своём приложении, добавив middleware для защиты маршрутов и используя обработчики маршрутов для запуска потока входа и обработки обратного вызова.
Вот простой пример того, как использовать SDK в вашем приложении на Express:
В этом примере мы используем middleware withLogto
для проверки состояния аутенти фикации и перенаправляем пользователя на страницу входа, если он не аутентифицирован, в противном случае мы отображаем приветственное сообщение.
Вы можете ознакомиться с официальным примером проекта на Express здесь.
Заключение
В этом руководстве мы рассмотрели шаги по созданию SDK для Express, реализующего базовый поток аутентификации в Logto. Здесь представлен базовый пример SDK. Вы можете расширить его, добавив больше методов и функциональности в зависимости от потребностей вашего приложения.
Вы можете следовать тем же шагам для создания SDK для любой другой платформы на JavaScript, работающей на Node.js.
Ресурсы: