如何使用 Node.js 和 MongoDB 进行身份验证

阅读时长 7 分钟读完

身份验证是现代 Web 应用程序中的一个重要组成部分,它可以确保只有经过身份验证的用户才能访问受保护的资源。在本文中,我们将介绍如何使用 Node.js 和 MongoDB 进行身份验证,以确保您的 Web 应用程序是安全的。

准备工作

在开始之前,您需要确保已经安装了 Node.js 和 MongoDB。您还需要安装以下软件包:

  • express: 用于创建 Web 服务器和路由请求。
  • jsonwebtoken: 用于生成和验证 JSON Web Tokens。
  • bcrypt: 用于对用户密码进行哈希处理和比较。
  • mongoose: 用于连接 MongoDB 数据库和定义模型。

您可以使用以下命令安装这些软件包:

创建用户模型

在开始身份验证之前,您需要创建一个用户模型来存储用户的信息。您可以使用 mongoose 定义一个用户模型,如下所示:

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

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

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

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

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

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

在此代码中,我们定义了一个名为 User 的模型,该模型包含 emailpassword 字段。我们还在保存用户之前使用 bcrypt 对用户密码进行哈希处理。最后,我们还定义了一个名为 comparePassword 的方法,该方法用于比较用户输入的密码和数据库中存储的哈希密码。

创建身份验证路由

接下来,我们将创建一个身份验证路由,该路由将用于处理用户登录和注册请求。在此示例中,我们将使用 JSON Web Tokens 来管理用户会话。

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

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

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

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

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

在此代码中,我们定义了两个路由:/register/login。在 /register 路由中,我们首先从请求正文中获取 emailpassword,然后创建一个新用户并将其保存到数据库中。最后,我们使用 JSON Web Tokens 生成一个令牌并将其发送回客户端。

/login 路由中,我们从请求正文中获取 emailpassword,然后查找数据库中是否存在该用户。如果用户不存在,则抛出错误。如果用户存在,则使用 comparePassword 方法比较输入的密码和数据库中的哈希密码。如果密码不匹配,则抛出错误。最后,我们使用 JSON Web Tokens 生成一个令牌并将其发送回客户端。

配置身份验证中间件

最后,我们需要配置身份验证中间件来确保只有经过身份验证的用户才能访问受保护的资源。我们可以创建一个名为 authMiddleware.js 的文件,并在其中定义身份验证中间件,如下所示:

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

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

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

在此代码中,我们首先从请求头中获取 JSON Web Token。如果令牌不存在,则返回 401 未经授权的错误。如果令牌存在,则使用 jsonwebtoken 解码令牌并将用户 ID 存储在请求对象中。最后,我们调用 next() 函数以继续处理请求。

结论

现在,您已经了解了如何使用 Node.js 和 MongoDB 进行身份验证。您可以使用这些技术来确保您的 Web 应用程序是安全的,并且只有经过身份验证的用户才能访问受保护的资源。在本文中,我们使用了 expressjsonwebtokenbcryptmongoose 等软件包来实现身份验证。我们还提供了完整的示例代码,以便您可以轻松地开始使用这些技术。

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

纠错
反馈