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

阅读时长 9 分钟读完

身份验证是现代 Web 应用程序中不可或缺的一部分,因为它允许您确保只有经过身份验证的用户才能访问应用程序的受保护部分。Passport.js 是一个流行的身份验证库,它提供了多种身份验证策略,包括本地身份验证、OAuth 和 OpenID 等。

在本文中,我们将探讨如何在 Express.js 中使用 Passport.js 进行身份验证。我们将介绍 Passport.js 的基本概念,然后演示如何使用本地身份验证策略进行身份验证。

Passport.js 简介

Passport.js 是一个 Node.js 应用程序的身份验证库,它可以轻松地集成到 Express.js 应用程序中。它提供了多种身份验证策略,包括本地身份验证、OAuth 和 OpenID 等。Passport.js 的核心概念是中间件,它允许您在请求处理管道中添加身份验证逻辑。

Passport.js 的工作流程如下:

  1. 在应用程序中注册 Passport.js 中间件。
  2. 配置身份验证策略。
  3. 在路由处理程序中使用 Passport.js 中间件来执行身份验证逻辑。

使用本地身份验证策略进行身份验证

在本地身份验证策略中,用户的身份验证信息存储在应用程序的数据库中。在本地身份验证中,用户将提供用户名和密码,然后应用程序将验证这些凭据是否与数据库中的记录匹配。

以下是使用本地身份验证策略进行身份验证的步骤:

步骤 1:安装 Passport.js 和相关模块

首先,我们需要安装 Passport.js 和相关模块。我们可以使用 npm 包管理器来安装它们:

步骤 2:配置 Passport.js 中间件

接下来,我们需要在应用程序中注册 Passport.js 中间件。我们需要在 app.js 文件中添加以下代码:

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

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

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

在这里,我们使用 express-session 模块来处理会话管理,然后使用 passport.initialize()passport.session() 方法来注册 Passport.js 中间件。

步骤 3:配置本地身份验证策略

接下来,我们需要配置本地身份验证策略。我们可以在 passport.js 文件中添加以下代码:

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

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

在这里,我们使用 passport-local 模块来实现本地身份验证策略。我们在 passport.use() 方法中注册本地身份验证策略。

在本地身份验证策略中,我们需要实现一个回调函数,该函数将验证提供的用户名和密码是否与数据库中的记录匹配。如果验证成功,则回调函数将返回用户对象;否则,它将返回 false。

步骤 4:配置序列化和反序列化函数

接下来,我们需要配置序列化和反序列化函数。这些函数将在用户登录和注销时使用。我们可以在 passport.js 文件中添加以下代码:

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

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

在这里,我们使用 passport.serializeUser() 方法来序列化用户对象,然后使用 passport.deserializeUser() 方法来反序列化用户对象。

步骤 5:创建登录路由

接下来,我们需要创建一个登录路由。我们可以在 routes/login.js 文件中添加以下代码:

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

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

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

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

在这里,我们使用 passport.authenticate() 方法来执行身份验证逻辑。如果身份验证成功,则用户将被重定向到主页;否则,他们将被重定向到登录页面。

步骤 6:创建注销路由

最后,我们需要创建一个注销路由。我们可以在 routes/logout.js 文件中添加以下代码:

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

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

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

在这里,我们使用 req.logout() 方法来注销用户,并将其重定向到主页。

示例代码

以下是完整的示例代码。我们可以将其保存在 passport.jsapp.jsroutes/login.jsroutes/logout.js 文件中。

passport.js

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

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

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

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

app.js

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

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

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

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

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

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

routes/login.js

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

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

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

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

routes/logout.js

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

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

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

总结

在本文中,我们介绍了如何在 Express.js 应用程序中使用 Passport.js 进行身份验证。我们演示了如何使用本地身份验证策略进行身份验证,并提供了完整的示例代码。Passport.js 是一个非常强大和灵活的身份验证库,它可以轻松地集成到任何 Node.js 应用程序中。

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

纠错
反馈