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

阅读时长 6 分钟读完

在 web 应用程序中,身份验证是一个非常重要的部分,而且越来越多的人选择使用 Passport.js 来进行身份验证。Passport.js 是一个非常流行的 Node.js 身份验证框架,它支持超过 300 种不同的身份验证策略,如本地策略、OAuth、OpenID 等。

Hapi 是一个非常受欢迎的 Node.js 应用程序框架,它易于使用、非常强大,支持各种扩展和插件。这篇文章将介绍如何在 Hapi 应用程序中使用 Passport.js 进行身份验证。

安装 Passport.js

Passport.js 可以通过 npm 安装,使用以下命令:

配置 Passport.js

在 Hapi 应用程序中使用 Passport.js 身份验证,我们需要先在应用程序中注册 Passport.js 插件。可以使用以下代码将其添加到 server.js 文件中:

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

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

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

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

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

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

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

-

--------

以上代码中配置了 hapi-auth-cookie 插件和 Passport 插件,默认启用的身份验证策略是 session,并且设置了 cookie 的密码和重定向的 URL。

我们需要为 Passport.js 设置一些策略,以便它能够与我们的应用程序一起工作。比如,我们可以使用以下代码添加本地策略:

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

这是一种非常常见的身份验证策略,它验证用户的用户名和密码。在上面的代码中,我们会去查找数据库中是否存在该用户,如果用户名或密码不正确,那么返回一个空对象。

使用 Passport.js 进行身份验证

当用户访问需要权限的页面时,我们需要对其进行身份验证,这时就可以使用 Passport.js 进行身份验证。以下代码是一个简单的路由定义,可以查看用户的个人资料:

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

在上面的代码中,我们设置了 auth: 'session',这意味着该路由需要进行身份验证。在处理程序的代码中,我们可以使用 request.auth.credentials 对象来获取用户的身份验证信息,然后显示该用户的用户名。

在 Passport.js 中,身份验证是通过中间件来实现的,以下代码是一个快速的示例,如何将 Passport.js 中间件添加到路由定义中:

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

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

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

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

在上面的代码中,我们定义了三个路由:登录、身份验证和注销。在 POST /login 上进行身份验证,使用 Passport.authenticate 中间件来验证用户凭据。如果用户成功登录,将重定向到 /profile 页面;如果登录失败,则将页面重定向到 /login

GET /logout 上,我们会主动退出用户并将其重定向到登录页面。

结论

在本文中,我们已经学习了如何在 Hapi 应用程序中使用 Passport.js 进行身份验证。我们首先需要配置 Passport.js 插件和策略,然后将其添加到需要进行身份验证的路由定义中。虽然使用 Passport.js 进行身份验证需要大量的额外正事,但是该框架的灵活性和可扩展性使其成为维护和扩展 Web 应用程序身份验证的强大工具。

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

纠错
反馈