使用 Mongoose 和 Express 的中间件进行认证和授权

阅读时长 8 分钟读完

随着 Web 应用程序的流行和复杂性的增加,认证和授权已经变得越来越重要。许多 Web 应用程序要求用户进行身份验证,以便他们可以访问应用程序的功能和资源。此外,某些用户可能具有对某些资源进行更改的权限,而其他用户则不具备这些权限。在这种情况下,授权非常有用,它可以确保只有具有适当权限的用户才能对资源进行更改。

本文将介绍如何使用 Mongoose 和 Express 的中间件进行认证和授权。我们将创建一个简单的 Web 应用程序,并使用 Passport 中间件进行身份验证,使用 JSON Web Token(JWT)进行授权。此外,我们还将使用 Mongoose 来管理用户和资源数据。

一、基本要求

  • Node.js
  • MongoDB
  • NPM

二、项目初始化

首先,我们需要创建一个新的 Node.js 项目。在命令行中输入以下内容:

接下来,安装以下依赖项:

  • express:Web 应用程序框架
  • passport:身份验证和登录管理器
  • passport-local:Passport 的 LocalStrategy
  • jsonwebtoken:JSON Web Tokens 的实现
  • mongoose:MongoDB 的对象数据建模库

三、创建 Mongoose 模型

我们需要使用 Mongoose 创建两个模型:

  • 用户模型(用于用户身份验证)
  • 资源模型(用于授权)

在 models 目录下创建 user.js 和 resource.js 文件。

1. user.js

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

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

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

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

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

2. resource.js

四、创建 Express 应用程序

在应用程序根目录下创建 app.js 文件,并添加以下代码:

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

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

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

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

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

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

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

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

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

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

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

在应用程序中,我们使用了 Express 和 Passport 模块来处理认证和授权。我们定义了一个 /login 路由,该路由使用 LocalStrategy 从 MongoDB 数据库中验证用户提供的用户名和密码。成功认证登录之后,我们使用 JWT 返回一个签名的令牌。

我们还为 /resources 和 /resources/:id 定义了路由,这些路由需要一个有效的 JWT 才能访问。如果请求不包含有效的 JWT,则 Passport 会停止处理请求并返回一个 401 状态代码。

五、测试

在命令行中启动应用程序:

要测试我们的应用程序,请使用任何 HTTP 客户端,例如 Postman 或 cURL。

首先,您需要创建新用户。在 Postman 中创建一个请求:

总结:本文介绍了如何使用 Mongoose 和 Express 的中间件进行简单的身份验证和授权。我们利用了 Passport 中间件来处理身份验证,并使用 JWT 来进行用户授权。

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

纠错
反馈