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