将 Passport.js 集成到 Fastify 中实现用户认证

随着 Web 应用程序的不断发展,用户认证成为了每个现代 Web 应用程序的必需组件之一。Passport.js 是 Node.js 最受欢迎的身份认证中间件之一。Fastify 是一个快速和低开销的 Web 框架。在本文中,我们将学习如何在 Fastify 中使用 Passport.js 实现用户认证。

步骤 1:安装 Passport.js 和相关策略

我们首先需要安装 Passport.js 和您选择的策略。例如,如果您要使用本地策略,则需要安装 “passport-local”:

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

安装其他策略的方式类似。

步骤 2:配置 Passport.js

在 Fastify 中配置 Passport.js 只需要几行代码。在您的 Fastify 应用程序的主文件中,添加以下代码:

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

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

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

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

上面的代码基于本地策略,使用了 bcrypt 进行密码哈希。如果您要使用其他策略或哈希库,请进行相应更改。

步骤 3:初始化 Passport.js

在 Fastify 应用程序的主文件中添加以下代码:

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

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

上面的代码初始化了 Passport.js 并添加了 cookie 支持。请确保在使用 Passport.js 之前调用这些代码。

步骤 4:实现用户认证

在 Fastify 应用程序的主文件中添加以下路由处理程序:

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

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

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

上面的代码提供了登录、注销和获取用户信息的路由。登录路由使用“passport.authenticate”中间件进行身份验证,该中间件使用您配置的策略。注销路由删除了会话数据,并最终显示成功的注销消息。获取用户信息的路由使用了“req.isAuthenticated()”方法,该方法将返回“true”如果用户经过身份验证,则返回为“false”。

示例代码

以下是完整的示例代码,包括使用 Fastify 和 MongoDB 的用户模型和路由处理程序。运行此代码需要安装“fastify”、“fastify-cookie”、“mongoose”、“passport”和“passport-local”:

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

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

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

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

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

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

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

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

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

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

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

结论

在本文中,我们学习了如何使用 Passport.js 在 Fastify 中实现用户认证。我们了解了如何配置 Passport.js 和如何使用策略进行身份验证。我们还提供了一个完整的示例,该示例可帮助您开始创建您自己的认证系统。

Passport.js 是一个非常灵活和强大的身份验证中间件。通过了解如何将其与 Fastify 集成,您可以快速创建一个安全和强大的用户认证系统。

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