如何使用 Fastify 框架为 Node.js 应用程序添加身份验证

阅读时长 8 分钟读完

在现代Web应用程序中,安全性是非常重要的一部分。 身份验证是保护Web应用程序和其内容的主要方法之一。Fastify是一个快速而易于使用的Node.js框架,它具有很好的插件架构并允许你轻松地添加任何插件,如身份验证插件。

在本文中,我们将学习如何使用Fastify框架来添加身份验证功能。我们将使用JSON Web令牌(JWT)进行身份验证。我们还将使用bcryptjs来安全地存储用户密码。

步骤1:安装Fastify和相关插件

我们开始之前,需要安装Fastify框架及其身份验证插件fastify-jwt以及密码加密插件bcryptjs。我们可以使用npm包管理器来安装这些插件。

步骤2:配置Fastify插件和路由

在我们开始写代码之前,先创建一个目录并初始化一个Node.js项目。

创建一个名为fastify-authentication的目录,然后使用以下命令来初始化一个NodeJS项目:

然后编辑 package.json 文件,添加以下内容:

-- -------------------- ---- -------
-
    ------- -------------------------
    ---------- --------
    -------------- ---
    ------- -----------
    ---------- -
        ------- ----- -------- -- ---- ----------- -- ---- --
    --
    ----------- ---
    --------- ---
    ---------- ------
    --------------- -
        ----------- ---------
        ---------- ----------
        -------------- ---------
    -
-

创建一个名为index.js的文件,并添加以下代码:

-- -------------------- ---- -------
----- ------- - -------------------- ------- ---- --
----- -------- - -------------------
----- --- - ----------------------

----- ------ - -------------
----- ----- - --

--------------------- - ------ --

----------------------- ----- --------- ------ -- -
    ----- - --------- -------- - - ------------
    
    -- ----- -- ---- ------
    -- ---------------- -- ------------- --- ---------- -
        ------------------------ -------- --------- ------- ------- --
        ------
    -

    ----- -------------- - ----- ----------------------- ---
    ------------ --------- --------- -------------- --

    ------------------------ -------- ----- ------- ------------- --
--

---------------------- ----- --------- ------ -- -
    ----- - --------- -------- - - ------------

    -- ----- -- ---- ------
    ----- ---- - --------------- -- ------------- --- ---------
    -- ------- -
        ------------------------ -------- -------- -------- -- --------- --
        ------
    -

    -- ----- -- -------- -- -------
    ----- ----------------- - ----- -------------------------- --------------
    -- -------------------- -
        ------------------------ -------- -------- -------- -- --------- --
        ------
    -

    -- -------- ---
    ----- ----- - ------------------ -------- --
    ------------ ----- --
--

------------------------- ----- --------- ------ -- -
    -- ------ ---
    --- -
        ----- -------------------
        ------------ -------- ----------- --------------- --
    - ----- ----- -
        ------------------------ -------- ----------- --
    -
--

-------------------- --- -- -
    -- ----- ----- ---
    -------------------- ------ --------- -- ---- ----------------------------------
--

在这个例子中,我们定义了三个路由:

  • 注册用户路由(/signup):这个路由将处理用户注册。它需要一个名为username和一个名为password的POST请求体参数。如果该用户名已经存在,它将返回一个400错误响应。否则将使用bcryptjs来加密该用户的密码,并将该用户添加到用户数组中。它将返回一个状态码201和一个响应对象,指示用户已成功创建。
  • 登录路由(/login):这个路由将处理用户登录。它需要一个名为username和一个名为password的POST请求体参数。如果该用户名不存在或密码不匹配,它将返回一个带有状态码401和身份验证错误消息的响应对象。否则,它将使用fastify-jwt生成一个JWT,并通过一个标准的响应对象返回JWT。
  • 受保护路由(/protected):这个路由将要求身份验证。请求的JWT将在请求头中的Authorization字段中传递,例如Authorization: Bearer <token>。它使用fastify-jwt来验证JWT。如果JWT验证成功,它将返回一个带有状态码200和成功身份验证消息的响应对象。否则,它将返回一个带有状态码401和身份验证错误消息的响应对象。

步骤3:测试身份验证

现在可以启动fastify服务器,并使用curl命令测试身份验证。

使用curl测试我们的API时,我们需要在请求头中提供JWT。让我们从注册一个新用户开始。

我们成功注册了一个新用户(John),现在我们可以使用他的凭证来登录并获取JWT。

响应应包括一个JWT,如下所示:

现在我们可以使用JWT来访问受保护的路由。

如果JWT验证成功,API将返回以下响应:

结论

现在你已经学会了如何为Node.js应用程序添加身份验证。使用Fastify和JSON Web Tokens(JWT),可以轻松地实现身份验证,并保护你的Web应用程序和其内容。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/677740bd6d66e0f9aa312e0b

纠错
反馈