Fastify 是一个高效且可扩展的 Node.js Web 开发框架。在 Web 开发中,身份验证是很重要的一部分。本教程将介绍如何使用 JSON Web Token(JWT)实现 Fastify 应用程序中的身份验证。
什么是 JWT?
JSON Web Token(JWT)是一种用于安全地在两个实体之间传递信息的开放标准。它由三部分组成,分别是头部,负载和签名。
头部包含算法和标头类型的信息。负载包含实际要传输的信息,例如用户 ID、访问权限等等。签名用于验证负载是否被篡改。
使用 JWT 的好处是服务器不需要存储用户状态,这有助于减轻服务器的负担。
快速入门
在本节中,我们将创建一个 Fastify 应用并使用 JWT 实现身份验证。假设我们有一个名为 “users” 的集合,其中包含用户的所有信息。为简洁起见,在本教程中将使用 MongoDB。
- 首先,安装 Fastify 和 fastify-jwt:
npm install fastify fastify-jwt mongodb
- 在 app.js 文件中,创建 Fastify 应用程序并连接到 MongoDB:
-- -------------------- ---- ------- ----- ------- - -------------------- ------- ---- -- ----- ---------- - ------------- ---------------------------------------- - ------- ---------- -- ---------------------- -------- --------- ----- - ----- ----------- - ------------------------------ ----- --- - --------------------------- ----- ------ - --------- ----- ------ - ----- ------------------------ - ---------------- ---- -- ----- -- - ----------------- ------------------------- - --- ------ ----------------------- -- -- -------------------- -------- ----- -------- - -- ----- - ---------------------- --------------- - ------------------------ --------- -- ------------ --
- 然后,创建一个路由来处理用户身份验证。在此路由中,将检查用户提供的凭据是否与数据库中的记录匹配。如果验证成功,则向用户提供一个 JWT。
-- -------------------- ---- ------- ---------------------- ----- -------- --------- ------ - ----- - ------ -------- - - ------------ ----- ---- - ----- ----------------------------- ----- -- -- ------- - --------------- - -------- --------------- ------- -- - -- --------- --- -------------- - --------------- - -------- --------------- ------- -- - ----- ----- - ------------------ --- -------- -- ------------ ----- -- --
- 最后,创建一个受保护的路由。在此路由中,将检查用户提供的 JWT 是否有效。如果有效,则返回受保护的内容。否则,返回 401。
-- -------------------- ---- ------- ------------------------- ----- -------- --------- ------ - --- - ----- ------------------- - ----- ----- - --------------- - -------- --------------- ------- -- - ------------ -------- ----- -- - --------- ------ -- --
完整代码可以在 GitHub 上找到。
总结
本教程介绍了如
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65acd91aadd4f0e0ff66b5e4