使用 Passport.js 在 Express.js 应用程序中进行身份验证

阅读时长 9 分钟读完

身份验证是现代 Web 应用程序中最重要的组成部分之一。它可以通过确保用户的安全和隐私来保护应用程序的安全性。在本文中,我们将介绍如何使用 Passport.js 和 Express.js 对用户进行身份验证。

Passport.js

Passport.js 是一个 Node.js 应用程序的身份验证中间件。它可以用于各种 Web 框架,包括 Express.js。它支持多种认证策略,并具有易于使用的 API。

Express.js

Express.js 是一个流行的 Web 框架,由 Node.js 开发。它具有强大的路由和中间件系统,并且易于使用和扩展。

使用 Passport.js 进行身份验证

现在,让我们看一下如何使用 Passport.js 在 Express.js 应用程序中进行身份验证。首先,我们需要安装以下软件包:

其中:

  • passport 是 Passport.js 的核心软件包。
  • passport-local 是本地认证策略软件包。
  • express-session 是 Express.js 的 session 中间件,用于处理用户会话。
  • bcryptjs 是用于散列用户密码的 Node.js 模块。

我们将使用本地认证策略来实现用户身份验证。本地策略是最常用的认证策略之一,并且与其他策略相比易于实现和维护。

app.js 文件中,我们可以这样初始化 Passport.js:

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

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

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

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

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

这段代码将本地认证策略连接到 Passport.js,并实现了序列化和反序列化用户。User 是一个 MongoDB 模型,用于存储用户数据。bcrypt.compareSync() 函数用于验证用户密码的散列值。

现在,我们需要在路由器中使用 Passport.js:

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

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

这段代码使用 passport.authenticate() 函数来处理本地认证策略。如果用户通过身份验证,则将请求重定向到主页。否则,则将请求重定向到登录页面。

示例代码

下面是完整的示例代码:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

此示例实现了一个简单的用户身份验证系统,包括注册和登录页面。它使用 Express.js、Passport.js 和 MongoDB,以及 bcrypt.js 模块来处理密码散列值。

总结

在本文中,我们介绍了如何使用 Passport.js 和 Express.js 进行用户身份验证。我们讨论了本地认证策略,并且提供了完整的示例代码。

身份验证对于现代 Web 应用程序至关重要。希望这篇文章能够帮助你了解如何在 Express.js 应用程序中使用 Passport.js 实现身份验证,并为你的 Web 应用程序提供更好的安全性。

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

纠错
反馈