Express.js 中使用 JSON Web Token(JWT)实现用户认证

阅读时长 9 分钟读完

在现代 Web 应用程序中,用户认证是一个必不可少的功能。它允许用户在访问应用程序的受保护资源之前进行身份验证。JSON Web Token(JWT)是一种在 Web 应用程序中实现身份验证和授权的流行标准。在本文中,我们将学习如何在 Express.js 中使用 JWT 实现用户认证。

什么是 JSON Web Token(JWT)?

JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在 Web 应用程序中定义安全、紧凑的方式传输信息。JWT 可以用于身份验证和授权。它由三部分组成:头部、载荷和签名。头部包含有关 JWT 的元数据,载荷包含有关用户的信息,签名用于验证 JWT 是否有效。

以下是 JWT 的结构示例:

在 Express.js 中使用 JWT 实现用户认证

在 Express.js 中使用 JWT 实现用户认证需要以下步骤:

  1. 创建一个 Express.js 应用程序。
  2. 安装所需的依赖项。
  3. 创建一个用户模型。
  4. 创建一个路由器,用于处理用户认证。
  5. 创建一个身份验证中间件,用于验证 JWT。
  6. 在需要身份验证的路由上使用身份验证中间件。

步骤 1:创建一个 Express.js 应用程序

首先,我们需要创建一个 Express.js 应用程序。我们可以使用以下命令创建一个新的应用程序:

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

这将创建一个 Express.js 应用程序,并在端口 3000 上启动它。

步骤 2:安装所需的依赖项

接下来,我们需要安装所需的依赖项。我们需要安装以下依赖项:

  • jsonwebtoken:用于生成和验证 JWT。
  • bcrypt:用于密码哈希。
  • body-parser:用于解析请求正文。

我们可以使用以下命令安装这些依赖项:

步骤 3:创建一个用户模型

接下来,我们需要创建一个用户模型。我们可以使用以下代码创建一个名为 User.js 的文件:

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

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

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

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

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

这将创建一个名为 User 的模型,并将其导出。

步骤 4:创建一个路由器,用于处理用户认证

接下来,我们需要创建一个路由器,用于处理用户认证。我们可以使用以下代码创建一个名为 authRouter.js 的文件:

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

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

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

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

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

这将创建一个名为 authRouter 的路由器,并将其导出。

步骤 5:创建一个身份验证中间件,用于验证 JWT

接下来,我们需要创建一个身份验证中间件,用于验证 JWT。我们可以使用以下代码创建一个名为 authMiddleware.js 的文件:

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

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

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

这将创建一个名为 authMiddleware 的中间件,并将其导出。

步骤 6:在需要身份验证的路由上使用身份验证中间件

最后,我们需要在需要身份验证的路由上使用身份验证中间件。我们可以使用以下代码修改 index.js 文件:

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

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

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

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

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

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

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

这将在 /protected 路由上使用 authMiddleware 中间件,以确保只有经过身份验证的用户才能访问该路由。

结论

在本文中,我们学习了如何在 Express.js 中使用 JWT 实现用户认证。我们创建了一个用户模型、一个路由器和一个身份验证中间件,并在需要身份验证的路由上使用了身份验证中间件。JWT 是一种流行的身份验证和授权标准,它可以在 Web 应用程序中安全地传输信息。使用 JWT 实现用户认证是一个重要的安全措施,它可以帮助保护您的应用程序免受未经授权的访问。

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

纠错
反馈