如何使用 Hapi 框架实现身份验证

阅读时长 6 分钟读完

Hapi 是一款 Node.js 的框架,用于构建 Web 应用程序和服务。它提供了一系列很好的内置功能,其中包括身份验证。

在本文中,我们将介绍如何使用 Hapi 框架实现身份验证。我们将使用 JSON Web Token(JWT)和 Bcrypt 程序库来实现身份验证。我们将创建一个基本的身份验证模块,该模块将检查用户是否可以访问受保护的路由。这将包括不同的步骤:

  1. 安装 Hapi 和相关的程序库

要安装 Hapi,您可以使用 npm:npm install @hapi/hapi

我们还需要安装两个程序库:jsonwebtoken 和 bcrypt

npm install jsonwebtoken bcrypt

  1. 创建 JWT

JSON Web Tokens(JWT)是一种基于 JSON 的开放标准(RFC 7519),用于在双方之间安全地传输信息。我们将使用 JWT 来验证用户的身份。

首先,我们将创建一个 JWT。以下是创建 JWT 的代码:

此代码将返回一个 JWT,其中包含用户 ID 和一些其他属性。我们还可以为 JWT 设置过期时间。

  1. 哈希密码

我们需要将用户的密码哈希化,以便我们可以在未保存实际密码的情况下进行安全比较。我们可以使用 bcrypt 程序库来实现这一点。以下是一个哈希化密码的代码:

在这里,我们使用 bcrypt 的哈希函数将密码哈希化。参数 10 表示哈希强度。

  1. 验证用户凭证

现在我们已经有了哈希化的密码和 JWT。接下来,我们需要编写代码,对用户的凭证进行验证。

在接下来的代码中,我们将使用 Hapi 的服务器验证策略来验证 API 端点。我们首先需要设置路由和策略:

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

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

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

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

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

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

  -- ----

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

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

-------

我们通过调用 server.register 来注册 hapi-auth-jwt2 插件来处理 JWT 策略的验证。接下来,我们通过调用 server.auth.strategyserver.auth.default 方法来定义策略。

在定义路由之前,让我们看一下验证函数本身的实现。此功能将 JWT 中的 ID 提取出来并查找用户,如果找到用户,则返回以下内容:

如果找不到用户,则返回以下内容:

接下来,我们将定义路由。以下是我们的示例代码:

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

我们将定义一个受保护的路由“/protected”。注意我们在选项中指定了要使用的验证策略 auth:'jwt'。

接下来,我们将创建一个验证函数,以便我们可以使用它来检查用户是否有权访问路由。

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

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

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

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

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

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

这个函数将查找用户,并使用 bcrypt 程序库的 compare 函数比较哈希化的密码。如果密码匹配,则将返回用户的凭据。

最后,我们需要在身份验证模块中导出两个函数:

  1. 结论

在这篇文章中,我们演示了如何使用 Hapi 框架实现身份验证。我们使用了 JSON Web Token 和 Bcrypt 程序库,并创建了一个基本的身份验证模块。我们还介绍了如何使用服务器验证策略来保护 API 端点并验证用户凭证。这个模块可以内嵌到你自己的项目中,并提供一个安全的身份验证解决方案。

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

纠错
反馈