如何使用 Express.js 实现基于 JSON Web Token 的用户认证和授权?

阅读时长 11 分钟读完

在现代 Web 应用程序中,用户身份验证和授权是必不可少的。JSON Web Token(JWT)是一种广泛使用的身份验证和授权机制,它使用 JSON 对象作为安全令牌。Express.js 是一个流行的 Node.js Web 框架,它提供了一个简单的方式来创建 Web 应用程序。在本文中,我们将学习如何使用 Express.js 实现基于 JSON Web Token 的用户认证和授权。

JSON Web Token 简介

JSON Web Token(JWT)是一种安全令牌,它由三个部分组成:头部,负载和签名。头部包含令牌的类型和所使用的签名算法。负载包含有关用户的信息,例如用户名和角色。签名用于验证令牌的完整性和身份验证。JWT 通常用于在客户端和服务器之间传递身份验证信息。

JWT 的工作流程如下:

  1. 用户提供用户名和密码进行身份验证。
  2. 服务器验证用户的凭据。
  3. 服务器生成 JWT 并将其发送回客户端。
  4. 客户端存储 JWT。
  5. 客户端向服务器发送请求,并在请求头中包含 JWT。
  6. 服务器验证 JWT 并执行所请求的操作。

Express.js 实现用户认证和授权

现在,让我们看看如何在 Express.js 中实现基于 JSON Web Token 的用户认证和授权。

安装依赖

首先,我们需要安装以下依赖:

其中:

  • express 是 Node.js 的 Web 框架。
  • jsonwebtoken 是用于生成和验证 JWT 的库。
  • body-parser 是用于解析请求体的库。
  • dotenv 是用于从 .env 文件中加载环境变量的库。

配置环境变量

接下来,我们需要创建一个 .env 文件,并在其中添加以下环境变量:

其中,your_jwt_secret 是用于签署 JWT 的密钥。

创建用户模型

接下来,我们需要创建一个用户模型,用于存储用户的信息。在本例中,我们将使用 MongoDB 作为数据库。

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

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

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

创建用户注册和登录路由

接下来,我们需要创建用户注册和登录路由。在注册路由中,我们将创建一个新用户,并将其保存到数据库中。在登录路由中,我们将验证用户的凭据,并生成 JWT。

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

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

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

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

创建受保护的路由

最后,我们需要创建一个受保护的路由,该路由需要 JWT 才能访问。在本例中,我们将使用 Express.js 中的中间件来验证 JWT。

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

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

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

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

启动应用程序

现在,我们已经完成了所有必要的设置。使用以下命令启动应用程序:

示例代码

完整的示例代码如下:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

结论

在本文中,我们学习了如何使用 Express.js 实现基于 JSON Web Token 的用户认证和授权。我们创建了一个用户模型,用户注册和登录路由以及受保护的路由。我们还学习了如何使用中间件来验证 JWT。这将有助于您构建更安全和可靠的 Web 应用程序。

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

纠错
反馈