现代 Web 应用程序中,用户认证系统是必不可少的一部分。在此,我们将介绍如何使用 HapiJS 和 JWT 来快速构建一个自己的用户认证系统。
什么是 HapiJS?
HapiJS 是一个 Node.js Web 应用程序框架,可以用于构建可伸缩的 Web 应用程序。它是一个插件化的框架,意味着您可以轻松地将自己的功能添加到应用程序中。HapiJS 能够处理路由、中间件、请求验证等等任务,并提供了高度的可定制性。
什么是 JWT?
JWT 即 JSON Web Token,是一种用于身份验证的标准。它可以在网络上安全地传送信息,因为它使用数字签名进行验证,并且可以在用户身份验证之后仅仅是在客户端存储信息。JWT 包含了用户的信息,以及用于验证该信息的数字签名。
构建自己的用户认证系统
我们将使用 HapiJS 和 JWT 构建一个简单的用户认证系统。该系统将包含以下特性:
- 用户注册
- 用户登录
- 加密用户密码
- 验证用户请求
- JWT 生成和验证
- 保护需要身份验证的路由
准备工作
在开始构建应用程序之前,我们需要安装必要的依赖项。我们可以使用 npm 安装以下依赖:
$ npm install --save hapi jsonwebtoken bcrypt
其中,hapi 是 HapiJS 框架,jsonwebtoken 是用于 JWT 的库,bcrypt 是用于密码加密的库。
创建服务器
我们可以使用以下事例代码来快速创建一个 HapiJS 服务器:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - --- ------------- ----- ------------ ----- ----- --- ----- ---- - ----- -- -- - ----- --------------- ------------------- ------- --- --------------------- -- -------------------------------- --- -- - ----------------- ---------------- --- -------
注册插件
接下来,我们需要注册一些需要的插件。我们将使用 hapi-auth-jwt2 来处理 JWT,您可以使用以下命令进行安装:
$ npm install --save hapi-auth-jwt2
我们的服务器代码现在应该如下所示:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- --- - ------------------------ ----- ------ - ------------------ ----- ------------ - -------------------------- ----- ------ - --- ------------- ----- ------------ ----- ----- --- -- -- -------------- -- ----- --------------- - ----- -- -- - ----- ------------------------------ -- ----- ---- - ----- -- -- - ----- ------------------ ----- --------------- ------------------- ------- --- --------------------- -- -------------------------------- --- -- - ----------------- ---------------- --- -------
定义路由
接下来,我们定义几个路由,分别用于用户注册和用户登录。对于这两个路由,我们将用户数据存储在内存中,其实际应用中需要替换成数据库。
-- -------------------- ---- ------- ----- ----- - --- -- ---- ----- ------------ - ----- -------- -- ----- --------------------- ---- -- ---- ----- --------------- - ----- ---------- ----- -- ----- ------------------------ ------ -- ---- -------------- ------- ------- ----- ------------ -------- ----- --------- -- -- - ----- - --------- -------- - - ---------------- ----- -------------- - ----- ----------------------- ------------ --------- --------- -------------- --- ------ ------------ -------- -------- ------------- -- --- -- ---- -------------- ------- ------- ----- --------- -------- ----- --------- -- -- - ----- - --------- -------- - - ---------------- ----- ---- - --------------- -- ------------- --- ---------- -- ------- - ------ ------------ -------- ------- ------------- - ----- ------- - ----- ------------------------- --------------- -- ---------- - ------ ------------ -------- ---------- ------------- - ----- ----- - ---------- -------- -- ------------- - ---------- ------- --- ------ - ----- -- -- ---
配置 hapi-auth-jwt2
现在我们已经有了一个两个路由,我们需要确保那些需要用户认证的路由保护不被未授权的用户访问。我们需要定义一个 JWT 策略,并将其应用于需要身份验证的路由。
-- -------------------- ---- ------- -- -- --- -- ----- ------------ - ----- --------- -------- -- -- - ----- - -------- - - -------- ----- ---- - --------------- -- ------------- --- ---------- -- ------- - ------ - -------- ----- -- - ------ - -------- ---- -- -- --------------------------- ------ - ---- ------------- --------- ------------- -------------- - ----------- --------- -- --- --------------------------- -- --------- -------------- ------- ------ ----- ------------- -------- --------- -- -- - ------ ------------ -------- ------------ --- -- -------- - ----- ----- - ---
测试
我们完成了所有的配置,现在我们可以启动服务器并进行测试。
$ node app.js Server running at: http://localhost:3000
我们可以使用 curl 或 Postman 等工具向 /register 和 /login 发起 POST 请求。
使用 /login 发起 POST 请求并获取返回的 JWT 令牌后,将其添加到每个需要身份验证的请求的头信息中进行访问。您可以使用 curl 或 Postman 等工具进行测试。
curl -H "Authorization: Bearer <your_token>" http://localhost:3000/protected
如果一切顺利,您应该会在请求的响应中看到 "需要身份验证的路由"。
结论
在本文中,我们介绍了如何使用 HapiJS 和 JWT 构建一个自己的用户认证系统。我们创建了两个简单的路由来处理用户注册和用户登录,使用 JWT 令牌保护需要身份验证的路由。通过本文,您应该可以快速掌握如何构建自己的用户认证系统。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66ee7ef46fbf96019722c771