介绍
在 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 的流程大概如下所示:
- 在后端服务器上生成 JWT,其中包含必要的信息(如用户 ID 等),并使用密钥签名。
- 将 JWT 返回给前端(比如通过 HTTP 响应的 headers 或者 JSON 返回体)。
- 前端在后续请求中将 JWT 作为 header 发送至后端服务器,以验证用户身份。
- 后端服务器收到 JWT,验证其合法性,并使用其中包含的数据进行用户验证。
Hapi.js 中使用 JWT
Hapi.js 提供了一个名为 hapi-auth-jwt2
的插件,可用于在 Hapi.js 中使用 JWT 实现用户验证。以下是如何在 Hapi.js 中使用 hapi-auth-jwt2
的具体方法:
安装插件
通过 npm 安装 hapi-auth-jwt2
:
$ npm install hapi-auth-jwt2
注册插件
在 Hapi.js 中注册插件:
-- -------------------- ---- ------- -- --------- ----- ---- - ---------------- ----- --- - -------------------------- ----- ------ - --- ------------- ----- ----- ----- ----------- --- ----- ------ - ------------- -- ---- --- ---------- ----- -------- - ----- --------- -- - -- ---------- -- ------- - --- -- ------- -- ----- ---- - ----- -- -- - ----- --------------------- --------------------------- ------ - ---- ------- --------- --------- -------------- - ----------- --------- - --- --------------------------- -- ----------- ----- --------------- ------------------- ------- --- --------------------- -- -------------------------------- ----- -- - ----------------- ---------------- --- -------
在上述代码中:
- 引入了
hapi-auth-jwt2
模块,并将其注册到 Hapi.js 中。 - 定义了一个
secret
变量,用于生成 JWT 的密钥。 - 定义了一个
validate
函数,用于实现用户验证的逻辑。 - 定义了一个
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