简体中文
  • nodejs
  • javascript
  • sdk
  • express

几分钟内为 Logto 构建一个基于 Node.js 的框架 SDK

学习如何使用 `@logto/node` 为 Logto 创建一个自定义 SDK。

Sijie
Sijie
Developer

之前在这篇文章中,我们花了几分钟为 Logto 构建了一个 Web SDK。现在,让我们专注于 Node.js,这是 JavaScript 开发者的另一种流行平台。

在本指南中,我们将逐步指导你如何使用 @logto/node 创建一个简单的 Express SDK 以集成 Logto。该 SDK 将实现登录流程,你可以按照相同的步骤为其他任何基于 Node.js 的平台(如 Koa、Next.js、NestJS 等)创建 SDK。

登录流程

在开始之前,让我们回顾一下 Logto 中的登录流程。登录流程包括以下步骤:

  1. 重定向到 Logto:用户被重定向到 Logto 登录页面。
  2. 身份验证:用户输入他们的凭证并在 Logto 上进行身份验证。
  3. 重定向回你的应用程序:身份验证成功后,用户将通过授权码重定向回你的应用程序。
  4. 授权码交换:你的应用程序将授权码交换为令牌,并将令牌存储为身份验证状态。

@logto/node 简介

@logto/browser 类似,@logto/node 包提供了一个 LogtoClient 类,该类提供了 Logto 的核心功能,包括登录流程的方法:

  1. signIn():生成 OIDC 授权 URL 并重定向到该 URL。
  2. handleSignInCallback():检查并解析回调 URL,提取授权码,然后通过调用令牌端点将其交换为令牌。
  3. getContext():根据会话 cookie 获取当前请求的上下文,包括身份验证状态和用户信息。

构建 Express SDK

在 SDK 中,我们将提供两个路由处理程序 (/sign-in/sign-in-callback) 以及一个 withLogto 中间件:

  1. /sign-in:触发登录流程的路由处理程序,响应中重定向到 OIDC 授权 URL。
  2. /sign-in-callback:处理回调 URL 的路由处理程序,交换授权码为令牌并存储它们,完成登录流程。
  3. withLogto 中间件:调用 getContext() 以检索当前请求的上下文,包括身份验证状态和用户信息。

要使用 SDK,你只需将中间件添加到你的 Express 应用程序中以保护路由,并使用路由处理程序来触发登录流程和处理回调。

第一步:安装包

首先,使用 npm 或其他包管理器安装 @logto/node 包:

第二步:准备存储适配器

需要存储适配器来初始化 LogtoClient 实例。

假设 SDK 用户已经设置了 Express 会话,我们可以通过创建一个新文件 storage.ts 来简单实现 Storage 类:

第三步:实现路由处理程序

HTTP 请求是无状态的,所以我们需要为每个请求初始化客户端实例。让我们准备一个帮助函数来创建客户端实例:

在这个函数中,我们实现了 navigate 适配器以及 ExpressStorage 适配器。navigate 适配器用于将用户重定向到登录 URL。

接下来,让我们实现路由处理程序,封装在一个函数 handleAuthRoutes 中:

  1. /auth/sign-in 路由处理程序通过调用 signIn() 启动登录流程,登录状态将存储在会话中,并由 /auth/sign-in-callback 路由处理程序使用。
  2. /auth/sign-in-callback 路由处理程序处理回调 URL,并通过调用 handleSignInCallback() 将授权码交换为令牌,这些令牌将由 ExpressStorage 适配器存储在会话中。交换完成后,用户将被重定向回主页。

第四步:实现中间件

withLogto 中间件用于保护路由。它调用 getContext() 以获取当前请求的上下文,包括身份验证状态和用户信息。

getContext 函数使用存储适配器从会话中获取令牌。

检查点:使用 SDK

现在你已经为 Logto 构建了 Express SDK,可以通过添加中间件来保护路由,并使用路由处理程序来触发登录流程和处理回调,将其应用到你的应用程序中。

这是一个如何在你的 Express 应用程序中使用 SDK 的简单示例:

在这个示例中,我们使用 withLogto 中间件来检查身份验证状态,如果用户没有进行身份验证,则将其重定向到登录页面,否则我们将显示欢迎信息。

你可以在这里查看官方的 Express 示例项目。

结论

在本指南中,我们逐步指导你如何创建一个 Express SDK 来实现基本的身份验证流程。这里提供的 SDK 是一个基础示例。你可以通过添加更多方法和功能来扩展它,以满足你应用程序的需求。

你可以按照相同的步骤为任何在 Node.js 中运行的其他 JavaScript 平台创建 SDK。

资源:

  1. Logto Node SDK
  2. Logto Express SDK