在 Express.js 中使用 Passport 进行本地身份验证的方法

阅读时长 9 分钟读完

在 web 应用程序的开发中,用户身份验证是一个必不可少的部分。Express.js 是一个广泛使用的 web 框架,而 Passport 是一个基于 Node.js 的身份验证框架。本文将介绍在 Express.js 中使用 Passport 进行本地身份验证的方法。

什么是 Passport?

Passport 是一个 Node.js 的身份验证框架,支持超过 300 种身份验证策略,包括常见的本地用户名/密码、OAuth、JWT 等。它提供了一个简单的 API 和易于扩展的架构,使得开发者可以快速地添加身份验证功能到 Node.js 应用中。

如何在 Express.js 中使用 Passport 进行本地身份验证?

本文将演示如何使用 Passport 进行本地身份验证。我们将使用 MongoDB 来保存用户信息,使用 Passport-local 策略进行用户名/密码验证。

步骤 1:创建项目并安装依赖

我们首先需要在本地创建一个 Express.js 项目,并安装必要的依赖。打开终端,进入项目目录,执行以下命令:

步骤 2:设置数据库连接

我们使用 MongoDB 来保存用户信息,因此需要设置数据库连接。在项目根目录下创建一个 config 目录,在其中创建 database.js 文件,输入以下内容:

这里设置了一个本地 MongoDB 数据库的连接 URL。你可以根据自己的需要进行修改。

步骤 3:创建用户模型

我们使用 Mongoose 来创建用户模型。在项目根目录下创建一个 models 目录,在其中创建 user.js 文件,输入以下内容:

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

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

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

这里定义了一个名为 User 的模型,包含了 nameemailpassword 三个字段,分别用于保存用户的姓名、邮箱和密码。这些字段可以根据自己的需求进行修改。

步骤 4:配置 Passport

我们需要在 Express.js 应用中配置 Passport。在项目根目录下创建一个 config 目录,在其中创建 passport.js 文件,输入以下内容:

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

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

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

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

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

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

这里我们使用 passport-local 策略来进行本地身份验证。LocalStrategy 构造函数的第一个参数指定了用于验证的字段名,默认为 username,这里我们指定为 email。在验证函数中,我们通过查询数据库来检查用户是否存在,并验证密码是否正确。如果一切正常,我们将用户对象作为验证结果传递给 done 方法。

serializeUser 方法用于将用户对象序列化为一个字符串,方便后续保存在 session 中。deserializeUser 方法用于从 session 中解析出一个用户对象。

步骤 5:配置 Express.js 应用

我们需要在 Express.js 应用中配置 Passport,并添加一些路由来处理身份验证相关的请求。在项目根目录下创建一个 app.js 文件,输入以下内容:

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

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

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

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

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

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

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

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

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

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

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

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

这里我们定义了三个路由:

  • /register:用于注册新用户。我们通过查询数据库来检查用户是否已经存在,如果不存在,则创建新的用户,并将其保存到数据库中。

  • /login:用于登录系统。我们使用 passport.authenticate("local") 方法来进行身份验证,如果验证通过,则将用户对象保存到 session 中,并返回登录成功的信息。

  • /profile:用于获取当前登录用户的信息。我们使用 Express.js 的 req.isAuthenticated() 方法来判断当前用户是否已经登录。

步骤 6:测试应用

我们使用 Postman 来测试我们的应用。在 Postman 中创建以下三个请求:

  • POST http://localhost:3000/register,请求体如下:
  • POST http://localhost:3000/login,请求体如下:
  • GET http://localhost:3000/profile

我们可以看到,第一个请求成功后,第二个请求返回登录成功的信息,第三个请求返回当前登录用户的信息。

总结

本文介绍了在 Express.js 中使用 Passport 进行本地身份验证的方法。我们使用 MongoDB 来保存用户信息,使用 Passport-local 策略进行用户名/密码验证。通过本文的演示,你应该已经掌握了在 Express.js 中配置 Passport 的方法,并可以使用 Passport 进行本地身份验证。

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

纠错
反馈