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

阅读时长 4 分钟读完

Passport 是一个流行的身份验证中间件,可以轻松地集成到 Express.js 中。在本文中,我们将介绍如何使用 Passport 进行本地身份验证,以确保用户可以安全地登录和访问应用程序。

安装

在开始之前,您需要安装 Express.js 和 Passport。可以使用以下命令进行安装:

配置

在 app.js 文件中,我们需要引入 Passport 和 Passport-local 模块,并配置它们:

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

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

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

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

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

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

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

这里我们使用了 Passport-local 策略进行本地身份验证。在 LocalStrategy 的回调函数中,我们使用 User.findOne() 方法查询数据库中是否存在该用户,并验证密码是否正确。如果验证成功,我们将返回用户对象。

passport.serializeUser() 和 passport.deserializeUser() 方法分别用于在用户登录后将用户对象存储在会话中,并在每个请求中将其提取。

路由

现在我们需要定义登录和注销路由:

在登录路由中,我们使用 passport.authenticate() 方法进行身份验证。如果验证成功,用户将被重定向到主页。如果验证失败,用户将被重定向到登录页面。

在注销路由中,我们使用 req.logout() 方法注销用户,并将其重定向到登录页面。

访问控制

现在我们已经配置了本地身份验证,并定义了登录和注销路由,我们需要确保只有已经登录的用户才能访问某些页面。我们可以使用 req.isAuthenticated() 方法来检查用户是否已经登录。

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

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

在上面的代码中,我们定义了一个名为 isAuthenticated 的中间件,它将检查用户是否已经登录。如果用户已经登录,中间件将调用 next() 方法,否则将重定向到登录页面。

在访问受保护的页面时,我们可以使用 isAuthenticated 中间件来确保只有已登录的用户才能访问。

结论

在本文中,我们介绍了如何在 Express.js 中使用 Passport 进行本地身份验证。我们配置了 Passport 和 Passport-local 模块,定义了登录和注销路由,并使用 isAuthenticated 中间件确保只有已登录的用户才能访问受保护的页面。通过使用这些技术,我们可以确保用户可以安全地登录和访问应用程序。

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

纠错
反馈