Criar um SDK baseado em Node.js para Logto em minutos
Aprenda a criar um SDK personalizado para Logto usando `@logto/node`.
Aprenda a criar um SDK personalizado para Logto usando `@logto/node`.
Anteriormente neste artigo, criámos um SDK web para Logto em minutos. Agora, vamos focar em Node.js, outra plataforma popular para programadores de JavaScript.
Neste guia, vamos guiá-lo pelos passos para criar um SDK simples para Express usando @logto/node. Este SDK irá implementar o fluxo de início de sessão, e você pode seguir os mesmos passos para criar um SDK para qualquer outra plataforma baseada em Node.js, como Koa, Next.js, NestJS, etc.
Antes de começarmos, vamos rever o fluxo de início de sessão no Logto. O fluxo de início de sessão compreende os seguintes passos:
@logto/nodeSemelhante ao @logto/browser, o pacote @logto/node expõe uma classe LogtoClient que fornece as funcionalidades principais do Logto, incluindo métodos para o fluxo de início de sessão:
signIn(): Gera o URL de autenticação OIDC e redireciona para ele.handleSignInCallback(): Verifica e analisa o URL de callback e extrai o código de autenticação, depois troca o código por tokens chamando o endpoint de tokens.getContext(): Obtém o contexto do pedido atual com base no cookie de sessão, incluindo o estado de autenticação e as informações do utilizador.No SDK, iremos fornecer dois manipuladores de rotas (/sign-in e /sign-in-callback) junto com um middleware withLogto:
/sign-in: Um manipulador de rota que inicia o fluxo de início de sessão com uma resposta que redireciona para o URL de autenticação OIDC./sign-in-callback: Um manipulador de rota que processa o URL de callback, troca o código de autenticação por tokens, armazena-os e completa o fluxo de início de sessão.withLogto middleware: Um middleware que chama getContext() para obter o contexto do pedido atual, incluindo o estado de autenticação e as informações do utilizador.Para usar o SDK, você pode simplesmente adicionar o middleware à sua app Express para proteger as rotas, e usar os manipuladores de rotas para iniciar o fluxo de início de sessão e lidar com o callback.
Primeiro, instale o pacote @logto/node usando o npm ou outro gestor de pacotes:
É necessário um adaptador de armazenamento para inicializar a instância do LogtoClient.
Assumindo que o utilizador do SDK já configurou a sessão Express, podemos simplesmente implementar a classe Storage criando um novo ficheiro storage.ts:
O pedido HTTP é sem estado, por isso precisamos de iniciar a instância do cliente para cada pedido. Vamos preparar uma função helper para criar a instância do cliente:
Nesta função, implementamos o adaptador navigate juntamente com o adaptador ExpressStorage. O adaptador navigate é usado para redirecionar o utilizador para o URL de início de sessão.
A seguir, vamos implementar os manipuladores de rotas, envolvidos numa função handleAuthRoutes:
/auth/sign-in inicia o fluxo de início de sessão chamando signIn(), um estado de início de sessão é armazenado na sessão e será consumido pelo manipulador da rota /auth/sign-in-callback./auth/sign-in-callback lida com o URL de callback e troca o código de autenticação por tokens chamando handleSignInCallback(), os tokens são armazenados na sessão pelo adaptador ExpressStorage. Depois da troca estar concluída, o utilizador é redirecionado de volta para a página inicial.O middleware withLogto é usado para proteger rotas. Ele chama getContext() para obter o contexto do pedido atual, incluindo o estado de autenticação e as informações do utilizador.
A função getContext usa o adaptador de armazenamento para obter os tokens da sessão.
Agora que você criou o SDK para Express do Logto, pode usá-lo na sua aplicação adicionando o middleware para proteger rotas e utilizando os manipuladores de rotas para iniciar o fluxo de início de sessão e lidar com o callback.
Aqui está um exemplo simples de como usar o SDK na sua aplicação Express:
Neste exemplo, usamos o middleware withLogto para verificar o estado de autenticação e redirecionar o utilizador para a página de início de sessão se não estiver autenticado, caso contrário, exibimos uma mensagem de boas-vindas.
Você pode verificar o projeto de exemplo oficial do Express aqui.
Neste guia, passámos pelos passos para criar um SDK para Express do Logto implementando o fluxo de autenticação básico. O SDK fornecido aqui é um exemplo básico. Você pode expandi-lo adicionando mais métodos e funcionalidades para atender às necessidades da sua aplicação.
Você pode seguir os mesmos passos para criar um SDK para qualquer outra plataforma baseada em JavaScript que corra em Node.js.
Recursos: