在现代 Web 应用程序中,用户身份验证是一个关键问题。为了保护用户数据和应用程序功能,我们需要一种安全的方式来管理用户身份验证。在本篇文章中,我们将介绍如何使用 Fastify 和 MongoDB 构建一个带有身份验证的网站。
什么是 Fastify?
Fastify 是一个基于 Node.js 构建的现代 Web 应用程序框架,它的目标是提供快速、低开销、可扩展的 Web API。Fastify 是一个非常快速且极易扩展的框架,它提供了许多有用的功能,如语言级的异步支持、路由和中间件系统、JSON 和 schema 验证、错误和日志处理等。
什么是 MongoDB?
MongoDB 是一种开源的分布式 NoSQL 数据库,它使用文档模型来存储数据。MongoDB 提供了高度可扩展性和灵活性,可以存储任何类型的数据,包括结构化、半结构化和非结构化数据。MongoDB 还提供了高可用性和横向扩展的能力,可以轻松地扩展到成百上千的节点。
构建带有身份验证的网站
现在我们已经了解了 Fastify 和 MongoDB 的基础知识,让我们开始使用它们来构建带有身份验证的网站。
Step 1:安装 Fastify 和 MongoDB
首先,我们需要在本地安装 Fastify 和 MongoDB。可以在终端中使用以下命令来安装这些软件包:
npm install fastify --save npm install mongodb --save
Step 2:连接 MongoDB 数据库
接下来,我们需要将 Fastify 连接到 MongoDB 数据库。可以在应用程序的入口点中编写以下代码:
-- -------------------- ---- ------- ----- ------- - -------------------- ----- ----------- - ------------------------------ ------------------------------------------------ -------- ----- ------- - -- ----- - ---------------- - ----- -- - ----------------- ------------------------- --- -------------------- -------- ----- -------- - -- ----- - ---------------- --------------- - ------------------- --------- -- ------------ -- --
Step 3:实现用户认证
现在,我们需要实现用户认证功能。让我们创建一个名为 auth
的路由,用于用户的注册和登录。
-- -------------------- ---- ------- --------------- ------- ------- ---- --------------------- ------- - ----- - ----- --------- --------- --------- ----------- -------- ----------- - ------ - ----- --------- ------- ------- -- --------- - ----- --------- ---------- - -- ----- - ----- -------- -- -- --------------------- ------ -- -- -------- ----- ----- ------ -- - ----- - ------ --------- ---- - - -------- ----- ------------ - ----- ------------- -------------------- ---------- ----- -- -- -------------- - --------------- ----- --- ----------- ------- -------- - ----- ---- - - ------ --------- ------------------------- ---- ----- - ----- ------ - ----- ------------------------------------------------- ---------------------- --- ------------------ -- -- -- --------------- ------- ------- ---- ------------------ ------- - ----- - ----- --------- --------- --------- ------------ ----------- - ------ - ----- -------- -- --------- - ----- -------- -- -- --------------------- ------ -- -- -------- ----- ----- ------ -- - ----- - ------ -------- - - -------- ----- ---- - ----- ------------- -------------------- ---------- ----- -- -- ------ -- ----------------------------- --------------- - --------------- ----- --- -------------- ----- -- ---------- - ----- ----- - ---------- ------- -------- -- --------- - ---------- ---- -- ------------ ------ ----- ---------- ------ ----------- -- -- --
在上面的代码中,我们使用了 bcrypt
和 jwt
第三方软件包来加密密码和生成 JSON Web Tokens。我们首先检查用户是否存在,如果不是我们返回错误响应。如果用户存在,我们将密码与数据库中的哈希进行比较。如果密码无效,则返回错误响应。否则,我们使用其 ID 生成 JWT 并将其发送回客户端。
Step 4:保护资源
最后,我们需要添加一个路由守卫(路由中间件)来保护需要身份验证的路由。我们可以使用以下代码来实现路由守卫:
-- -------------------- ---- ------- -------------------------------- ----- ----- ---- -- - --- - ----- ----- - --------------------------------- ----- ----- ------- - ----------------- --------- -------- - ------- - ----- ----- - -------------------- -------- -------------- -- - -- --------------- ------- ------ ---- ----------------- -------------- ---------------------------------- -------- ----- ----- ------ -- - ----- ------ - --------------- ----- ---- - ----- ------------- -------------------- ---------- ---- --- ------------------------ -- ------------ ----- ---------- ------ ----------- -- -- --
在上面的代码中,我们使用 addHook
方法添加一个名为 preValidation
的钩子。在该钩子中,我们获取 Authorization 头并验证 JWT。如果 JWT 无效,则返回错误响应。否则,我们将解码的用户 ID 添加到请求对象中。接下来,我们使用 auth
方法将路由守卫添加到 /api/protected
路由。在路由的处理程序中,我们从请求对象中提取用户 ID,并使用它来查找用户,返回用户的名称和电子邮件。
Step 5:启动应用程序
现在,我们已经完成了身份验证功能的实现,可以启动应用程序并测试它。在应用程序的根目录中,运行以下命令来启动应用程序:
node app.js
应用程序将在本地的端口号 3000 上运行。您可以使用 Postman 或任何其他 REST 客户端测试它。
结论
使用 Fastify 和 MongoDB 构建带有身份验证的网站可以是一件非常容易且有趣的事情。在本文中,我们介绍了 Fastify 和 MongoDB 的基本知识,并演示了如何使用它们来创建一个基本的身份验证系统。希望这篇文章可以帮助你开始使用 Fastify 和 MongoDB 来构建更加复杂的应用程序。如果您有任何疑问或反馈,请随时在评论区留言。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6751003c050cf9039c18e9ac