Hapi.js 中使用 JWT 实现用户验证

阅读时长 5 分钟读完

介绍

在 web 应用程序开发中,用户验证是不可或缺的一个环节。基于 session 的传统方法已经越来越不受欢迎,而 JWT(JSON Web Token)作为一种轻量级的身份验证方式,已经越来越被广泛采用。Hapi.js 作为一种 Node.js 的框架,提供了许多便于用户验证的插件,其中包括对 JWT 的支持。本文将介绍如何在 Hapi.js 中使用 JWT 实现用户验证。

JWT 简介

JWT 是由三个不同的部分组成的“JSON Web Token”:header、payload 和 signature。header 包含有关 token 类型、生成算法等的元信息;payload 是存储实际数据的位置,比如用户 ID 等;signature 则是通过组合 header 和 payload 以及密钥生成的哈希值,用于验证 token 是否被篡改过。

创建 JWT 的流程大概如下所示:

  1. 在后端服务器上生成 JWT,其中包含必要的信息(如用户 ID 等),并使用密钥签名。
  2. 将 JWT 返回给前端(比如通过 HTTP 响应的 headers 或者 JSON 返回体)。
  3. 前端在后续请求中将 JWT 作为 header 发送至后端服务器,以验证用户身份。
  4. 后端服务器收到 JWT,验证其合法性,并使用其中包含的数据进行用户验证。

Hapi.js 中使用 JWT

Hapi.js 提供了一个名为 hapi-auth-jwt2 的插件,可用于在 Hapi.js 中使用 JWT 实现用户验证。以下是如何在 Hapi.js 中使用 hapi-auth-jwt2 的具体方法:

安装插件

通过 npm 安装 hapi-auth-jwt2

注册插件

在 Hapi.js 中注册插件:

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

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

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

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

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

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

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

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

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

-------

在上述代码中:

  1. 引入了 hapi-auth-jwt2 模块,并将其注册到 Hapi.js 中。
  2. 定义了一个 secret 变量,用于生成 JWT 的密钥。
  3. 定义了一个 validate 函数,用于实现用户验证的逻辑。
  4. 定义了一个 init 函数,在其中注册插件、定义 strategy 和启动服务器等业务逻辑。

生成 JWT

在后端服务器生成并返回 JWT:

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

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

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

在上述代码中,使用 jsonwebtoken 模块将 payload 中的数据与密钥 secret 组合生成 JWT。

校验 JWT

通过前端发送的 JWT 进行校验:

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

在上述代码中,通过添加 options.auth: 'jwt',来指示 Hapi.js 对该路由进行 JWT 校验。

总结

本文介绍了在 Hapi.js 中使用 JWT 实现用户验证的方法,并提供了详细的示例代码。通过 JWT 可以减少服务器端存储用户信息的压力,提高应用程序的性能。

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

纠错
反馈