Express.js 中使用 Passport.js 实现本地认证的方法和最佳实践

在 Web 应用程序中,认证是一项重要的任务。 Passport.js 是一个非常流行的认证中间件,它提供了许多不同的认证策略,包括本地认证、OAuth 和 OpenID 等。

在本文中,我们将探讨如何在 Express.js 中使用 Passport.js 实现本地认证。我们将讨论必须的步骤、最佳实践以及一些示例代码。本文假设您已经有 Express.js 应用程序的基础知识,并且希望在应用程序中实现本地认证。

Step 1: 安装和配置 Passport.js

首先,我们需要在我们的 Express.js 应用程序中安装 Passport 和本地认证策略。我们可以使用以下命令安装所需的包:

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

接下来,我们需要初始化 Passport 并配置它使用本地认证策略。这些步骤需要在我们的 Express.js 应用程序的应用程序级别执行,通常在 app.js 或 index.js 中。

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

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

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

在上述示例代码中,我们首先要求 passportpassport-local 模块,并在我们的应用程序中初始化 passport。接下来,我们定义一个本地策略,这个策略将在用户提交认证表单时被调用。我们可以在这里实现自己的认证逻辑。在这个例子中,我们暂时把回调函数定义在了 todo 中。

Step 2: 实现本地认证逻辑

在上一步中,我们定义了一个本地策略,但是我们还没有实现任何认证逻辑。在这一步中,我们将学习如何实现一个基本的本地认证逻辑。

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

在上述示例代码中,我们首先查询数据库,尝试查找具有给定用户名的用户。如果用户不存在,则我们使用 done() 回调函数将认证失败。否则,我们检查用户提供的密码是否正确。如果密码不正确,则我们使用 done() 回调函数将认证失败。最后,如果用户和密码都通过了认证,则我们使用 done() 回调函数将用户作为认证结果返回。

请注意,上述示例代码中使用的方法可能会有所不同,具体取决于您的数据库架构和加密逻辑。

Step 3: 定义序列化和反序列化逻辑

在上述步骤中,我们使用 done() 回调函数返回一个认证结果。但是,我们需要更多的代码来跟踪已认证的用户。在本步骤中,我们将学习如何定义序列化和反序列化逻辑,以帮助我们跟踪已认证的用户。

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

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

在上述示例代码中,我们定义了 serializeUser()deserializeUser() 方法,这些方法将帮助我们跟踪已认证的用户。当用户首次成功进行本地认证时,serializeUser() 方法将返回用户的 ID,并将其存储在会话中。deserializeUser() 方法将使用存储在会话中的 ID 查找用户,并将用户对象注入到请求对象中,以便在后续的请求中使用。

Step 4: 创建认证路由

我们已经初始化了 Passport 并定义了本地策略,现在我们需要为我们的认证逻辑创建一个路由。在下面的示例代码中,我们将使用 /login 路由作为我们的认证路由。

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

在上述示例代码中,我们定义了一个 POST 路由 /login,该路由将使用 Passport 中的本地策略进行认证。如果认证成功,将重定向到我们的应用程序的主页(/)。如果认证失败,将重定向到 /login

Step 5: 保护您的路由

现在,让我们来考虑如何保护我们的路由。一旦用户登录,我们需要确保只有已经认证的用户才能访问他们有权访问的部分。在下面的示例代码中,我们将使用 ensureAuthenticated 中间件来保护 /profile 路由。

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

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

在上述示例代码中,我们定义了一个名为 ensureAuthenticated 的中间件,该中间件将检查是否已进行了认证,如果已进行了认证,则允许请求继续。否则,该中间件将重定向到 /login。我们可以在其他路由中使用这个中间件来保护任何需要认证的资源。

最佳实践

  • 使用密码加密:在存储密码时,请确保使用适当的加密算法来保护用户的密码。
  • 使用中间件:在处理认证逻辑时,请使用中间件来避免代码重复。
  • 使用 Passport.js 插件:Passport.js 提供了许多不同的插件来帮助认证逻辑,例如 Passport Facebook、Passport Google 和 Passport Twitter 等。

结论

在本文中,我们学习了如何在 Express.js 应用程序中使用 Passport.js 实现本地认证。我们讨论了必须的步骤、最佳实践以及一些示例代码。 Passport.js 是一个非常流行的认证中间件,并且可以与许多不同的认证策略一起使用。如果您希望加强认证逻辑,您可以探索其他 Passport.js 插件和认证策略。

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