使用 Fastify 和 MongoDB 构建带有身份验证的网站

阅读时长 8 分钟读完

在现代 Web 应用程序中,用户身份验证是一个关键问题。为了保护用户数据和应用程序功能,我们需要一种安全的方式来管理用户身份验证。在本篇文章中,我们将介绍如何使用 Fastify 和 MongoDB 构建一个带有身份验证的网站。

什么是 Fastify?

Fastify 是一个基于 Node.js 构建的现代 Web 应用程序框架,它的目标是提供快速、低开销、可扩展的 Web API。Fastify 是一个非常快速且极易扩展的框架,它提供了许多有用的功能,如语言级的异步支持、路由和中间件系统、JSON 和 schema 验证、错误和日志处理等。

什么是 MongoDB?

MongoDB 是一种开源的分布式 NoSQL 数据库,它使用文档模型来存储数据。MongoDB 提供了高度可扩展性和灵活性,可以存储任何类型的数据,包括结构化、半结构化和非结构化数据。MongoDB 还提供了高可用性和横向扩展的能力,可以轻松地扩展到成百上千的节点。

构建带有身份验证的网站

现在我们已经了解了 Fastify 和 MongoDB 的基础知识,让我们开始使用它们来构建带有身份验证的网站。

Step 1:安装 Fastify 和 MongoDB

首先,我们需要在本地安装 Fastify 和 MongoDB。可以在终端中使用以下命令来安装这些软件包:

Step 2:连接 MongoDB 数据库

接下来,我们需要将 Fastify 连接到 MongoDB 数据库。可以在应用程序的入口点中编写以下代码:

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

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

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

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

Step 3:实现用户认证

现在,我们需要实现用户认证功能。让我们创建一个名为 auth 的路由,用于用户的注册和登录。

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

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

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

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

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

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

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

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

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

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

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

在上面的代码中,我们使用了 bcryptjwt 第三方软件包来加密密码和生成 JSON Web Tokens。我们首先检查用户是否存在,如果不是我们返回错误响应。如果用户存在,我们将密码与数据库中的哈希进行比较。如果密码无效,则返回错误响应。否则,我们使用其 ID 生成 JWT 并将其发送回客户端。

Step 4:保护资源

最后,我们需要添加一个路由守卫(路由中间件)来保护需要身份验证的路由。我们可以使用以下代码来实现路由守卫:

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

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

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

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

在上面的代码中,我们使用 addHook 方法添加一个名为 preValidation 的钩子。在该钩子中,我们获取 Authorization 头并验证 JWT。如果 JWT 无效,则返回错误响应。否则,我们将解码的用户 ID 添加到请求对象中。接下来,我们使用 auth 方法将路由守卫添加到 /api/protected 路由。在路由的处理程序中,我们从请求对象中提取用户 ID,并使用它来查找用户,返回用户的名称和电子邮件。

Step 5:启动应用程序

现在,我们已经完成了身份验证功能的实现,可以启动应用程序并测试它。在应用程序的根目录中,运行以下命令来启动应用程序:

应用程序将在本地的端口号 3000 上运行。您可以使用 Postman 或任何其他 REST 客户端测试它。

结论

使用 Fastify 和 MongoDB 构建带有身份验证的网站可以是一件非常容易且有趣的事情。在本文中,我们介绍了 Fastify 和 MongoDB 的基本知识,并演示了如何使用它们来创建一个基本的身份验证系统。希望这篇文章可以帮助你开始使用 Fastify 和 MongoDB 来构建更加复杂的应用程序。如果您有任何疑问或反馈,请随时在评论区留言。

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

纠错
反馈