如何使用 Express.js 和 JWT 进行用户身份验证

阅读时长 8 分钟读完

在实现 Web 应用程序时,用户身份验证是一个至关重要的问题。使用 JWT(JSON Web Token)是一种流行的方式,因为它提供了一种方便的方法来管理用户的身份验证状态。在本文中,我们将学习如何使用 Express.js 和 JWT 实现用户身份验证。

JWT 简介

JWT 是一种开放标准(RFC 7519),用于在不同应用程序(或服务)之间安全地传输信息,可以用于身份验证和授权。JWT 由三部分组成:

  • Header - 包含令牌的类型和算法
  • Payload - 包含令牌的信息(称为声明)
  • Signature - 用于验证令牌是否被篡改

JWT 是无状态的,这意味着服务器不需要存储会话信息。用户一旦进行身份验证并获得 JWT,就可以使用该令牌来访问受保护的资源。

Express.js 和 JWT

Express.js 是一个流行的 Node.js Web 框架。我们可以使用它来创建 Web 应用程序和 REST API。在使用 JWT 进行用户身份验证时,我们需要一些额外的步骤来确保客户端具有有效的令牌。

1. 安装依赖项

我们需要安装一些依赖项。打开终端并输入以下命令:

  • express 是我们的 Web 框架
  • jsonwebtoken 用于创建和验证 JWT
  • bcrypt 用于加密密码
  • cors 允许跨域资源共享
  • body-parser 用于解析请求正文中的 JSON 数据

2. 创建 Express 应用程序

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

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

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

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

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

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

在上面的代码中,我们导入所需的所有依赖项,并使用 app.use 方法添加了 corsbody-parser 中间件。

3. 添加用户注册和登录路由

我们需要添加路由来处理用户注册和登录。在 app.js 文件的末尾添加以下代码:

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

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

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

在上面的代码中,我们使用以下路由:

  • /register - 使用 bcrypt 哈希方式加密密码,并将新用户保存到一个数组中。
  • /login - 验证用户凭据并返回 JWT。

4. 验证 JWT

我们需要添加中间件来验证 JWT 和保护我们的资源。在 app.js 文件中添加以下代码:

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

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

在上面的代码中,我们使用以下中间件:

  • authenticateToken - 用于验证 JWT 并将解码的用户对象添加到请求对象中。
  • /protected - 受保护的路由,只有具有有效 JWT 的用户才可以访问。

示例代码

下面是一个完整的 app.js 文件示例,可供您参考:

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

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

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

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

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

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

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

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

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

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

总结

在本文中,我们学习了如何使用 Express.js 和 JWT 实现用户身份验证。我们使用 jsonwebtokenbcrypt 包来创建和验证 JWT,并使用 corsbody-parser 中间件来解决跨域问题和解析 JSON 数据。我们还看到了如何验证 JWT 并保护受限资源。如果您遵循本文的步骤,就可以按照自己的需求构建自己的 Web 应用程序和 REST API。

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

纠错
反馈