如何在 Express.js 中使用 Passport 认证

在现代 web 应用程序中,用户认证是一个必不可少的功能。 Passport 是一个 Node.js 的身份验证中间件,它可以帮助我们在 Express.js 应用程序中实现用户身份验证和授权。在本文中,我们将学习如何在 Express.js 中使用 Passport 认证。

安装 Passport

在开始使用 Passport 之前,我们需要安装它。可以使用 npm 命令进行安装。

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

这将安装 Passport 及其本地策略。

配置 Passport

在配置 Passport 之前,我们需要在 Express.js 应用程序中引入 Passport 模块。

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

然后,我们需要配置 Passport。我们需要告诉 Passport 如何序列化和反序列化用户对象。序列化用户对象是指将用户对象转换为一个可存储的标识符,以便在用户登录后将其存储在会话中。反序列化用户对象是指将存储的标识符转换回用户对象。

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

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

在这个例子中,我们使用 MongoDB 数据库存储用户对象。我们使用 User.findById 方法从数据库中检索用户对象。done 回调函数用于在完成序列化或反序列化操作后通知 Passport。

接下来,我们需要告诉 Passport 使用哪种策略进行身份验证。在本例中,我们将使用本地策略进行身份验证。

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

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

在这个例子中,我们使用 User.findOne 方法从数据库中检索用户对象。如果找到用户对象,则验证密码。如果密码验证成功,则使用 done 回调函数将用户对象返回给 Passport。否则,返回错误消息。

使用 Passport

在配置 Passport 后,我们需要在 Express.js 应用程序中使用它。我们需要使用 Passport 中间件将 Passport 添加到 Express.js 应用程序中。

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

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

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

在这个例子中,我们使用 express-session 中间件来处理会话。我们将 Passport 初始化中间件和 Passport 会话中间件添加到 Express.js 应用程序中。

现在,我们可以使用 Passport 进行身份验证。我们可以使用 passport.authenticate 方法来验证用户凭据。例如,我们可以使用下面的代码来验证用户登录。

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

在这个例子中,我们使用 passport.authenticate 方法来验证用户凭据。如果验证成功,则重定向到主页。否则,重定向到登录页面。

示例代码

下面是一个完整的 Express.js 应用程序,它使用 Passport 进行身份验证。

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

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

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

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

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

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

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

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

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

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

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

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

这个例子中,我们使用本地策略进行身份验证。我们使用一个简单的数组来存储用户对象。在实际应用程序中,我们应该使用数据库来存储用户对象。

结论

在本文中,我们学习了如何在 Express.js 应用程序中使用 Passport 进行身份验证。我们学习了如何配置 Passport,如何使用 Passport 中间件,以及如何使用 Passport 进行身份验证。我们还提供了一个完整的 Express.js 应用程序示例,它使用 Passport 进行身份验证。现在,你可以在自己的应用程序中使用 Passport 进行身份验证。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/673c92a1face55d72054822c