用 HapiJS 和 JWT 快速搭建自己的用户认证系统

阅读时长 7 分钟读完

现代 Web 应用程序中,用户认证系统是必不可少的一部分。在此,我们将介绍如何使用 HapiJS 和 JWT 来快速构建一个自己的用户认证系统。

什么是 HapiJS?

HapiJS 是一个 Node.js Web 应用程序框架,可以用于构建可伸缩的 Web 应用程序。它是一个插件化的框架,意味着您可以轻松地将自己的功能添加到应用程序中。HapiJS 能够处理路由、中间件、请求验证等等任务,并提供了高度的可定制性。

什么是 JWT?

JWT 即 JSON Web Token,是一种用于身份验证的标准。它可以在网络上安全地传送信息,因为它使用数字签名进行验证,并且可以在用户身份验证之后仅仅是在客户端存储信息。JWT 包含了用户的信息,以及用于验证该信息的数字签名。

构建自己的用户认证系统

我们将使用 HapiJS 和 JWT 构建一个简单的用户认证系统。该系统将包含以下特性:

  • 用户注册
  • 用户登录
  • 加密用户密码
  • 验证用户请求
  • JWT 生成和验证
  • 保护需要身份验证的路由

准备工作

在开始构建应用程序之前,我们需要安装必要的依赖项。我们可以使用 npm 安装以下依赖:

其中,hapi 是 HapiJS 框架,jsonwebtoken 是用于 JWT 的库,bcrypt 是用于密码加密的库。

创建服务器

我们可以使用以下事例代码来快速创建一个 HapiJS 服务器:

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

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

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

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

-------

注册插件

接下来,我们需要注册一些需要的插件。我们将使用 hapi-auth-jwt2 来处理 JWT,您可以使用以下命令进行安装:

我们的服务器代码现在应该如下所示:

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

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

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

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

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

-------

定义路由

接下来,我们定义几个路由,分别用于用户注册和用户登录。对于这两个路由,我们将用户数据存储在内存中,其实际应用中需要替换成数据库。

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

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

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

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

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

配置 hapi-auth-jwt2

现在我们已经有了一个两个路由,我们需要确保那些需要用户认证的路由保护不被未授权的用户访问。我们需要定义一个 JWT 策略,并将其应用于需要身份验证的路由。

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

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

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

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

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

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

测试

我们完成了所有的配置,现在我们可以启动服务器并进行测试。

我们可以使用 curl 或 Postman 等工具向 /register 和 /login 发起 POST 请求。

使用 /login 发起 POST 请求并获取返回的 JWT 令牌后,将其添加到每个需要身份验证的请求的头信息中进行访问。您可以使用 curl 或 Postman 等工具进行测试。

如果一切顺利,您应该会在请求的响应中看到 "需要身份验证的路由"。

结论

在本文中,我们介绍了如何使用 HapiJS 和 JWT 构建一个自己的用户认证系统。我们创建了两个简单的路由来处理用户注册和用户登录,使用 JWT 令牌保护需要身份验证的路由。通过本文,您应该可以快速掌握如何构建自己的用户认证系统。

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

纠错
反馈