在现代 Web 开发中,身份验证和授权是非常重要的功能。Web 应用程序需要确保用户无法访问未经授权的资源。在前端开发中,实现身份验证和授权的方式有很多,但 JWT 是目前最流行的方法之一。JWT(JSON Web Token)是一个开放标准,它定义了一种紧凑且自包含的方式来在各方之间安全地传输信息。
在本篇文章中,我们将介绍如何在前端应用程序中使用 Fastify 和 JWT 实现身份验证和授权。Fastify 是一个快速、低开销和可扩展的 Node.js Web 框架,而 JWT 是一个标准的身份验证和授权方式。
为什么要使用 Fastify 和 JWT?
在了解如何使用 Fastify 和 JWT 之前,我们需要先了解这两个工具提供的优势:
Fastify
Fastify 是一个非常快速和低开销的 Node.js Web 框架,它专注于提供高效的路由、请求、响应和插件机制。Fastify 的主要优势之一是其灵活的插件机制。Fastify 提供了一个灵活的体系结构,允许你使用许多不同的插件来扩展它的功能。这使得 Fastify 成为一个非常有用的开发工具,因为它允许你根据你的需要快速构建定制的 Web 应用程序。
JWT
JWT 是一种用于认证和授权的标准,它定义了一种在客户端和服务器之间传输 JSON 数据的方式。JWT 根据一组加密规则将 JSON 数据封装到安全的字符串中,在客户端和服务器之间进行传输。JWT 允许你在客户端存储用户的授权凭证,而不需要将这些凭证存储在服务器上。这使得 JWT 成为一种非常方便的开发工具,因为它允许你以一种独立于服务器的方式存储和传输授权信息。
实现步骤
现在我们来看一下如何在前端应用程序中使用 Fastify 和 JWT 实现身份验证和授权。
步骤 1: 安装必要的依赖包
打开你的控制台,并在你的项目目录下运行以下命令:
npm install fastify fastify-jwt
这将会下载并安装 Fastify 和 JWT 依赖包。
步骤 2: 初始化 Fastify 应用程序
我们需要创建一个 Fastify 应用程序来处理身份验证和授权。在你的项目中创建一个新的 JavaScript 文件,并添加以下代码:
const fastify = require('fastify')();
这将创建一个新的 Fastify 应用程序。
步骤 3: 添加 JWT 插件
我们需要在 Fastify 应用程序中添加 JWT 插件来处理身份验证和授权。在你的 JavaScript 文件中添加以下代码:
const fastifyJWT = require('fastify-jwt'); fastify.register(fastifyJWT, { secret: 'my-secret-key' });
这将注册 JWT 插件,并使用一个密钥来加密令牌。
步骤 4: 创建身份验证路由
我们需要创建一个身份验证路由来接受用户的凭据并生成 JWT 令牌。在你的 JavaScript 文件中添加以下代码:
-- -------------------- ---- ------- ---------------------- ----- --------- ------ -- - -- -------- ----- - --------- -------- - - ------------- -- -------- -- --------- --- ------- -- -------- --- ----------- - ------------------ ----- --- ------------------ - -- -- --- -- ----- ----- - ----- ------------------ -------- --- -- -- --- ------ ------------ ----- --- ---
这将创建一个路由,它将接受用户名和密码并验证它们。如果用户名和密码有效,则生成一个 JWT 令牌并将其发送回客户端。
步骤 5: 创建受保护的路由
我们需要创建一个受保护的路由来确保只有通过身份验证的用户才能访问它。在你的 JavaScript 文件中添加以下代码:
fastify.get('/protected', { preValidation: [fastify.authenticate] }, (request, reply) => { const { username } = request.user; reply.send(`你好,${username}!`); });
这将创建一个受保护的路由,它要求用户进行身份验证。该路由将在 Fastify 应用程序主体中注册 Fastify-JWT 验证器 preValidation,以确保只有带有有效 JWT 的身份验证用户才能访问。
步骤 6: 添加身份验证逻辑
我们需要创建一个身份验证函数来处理身份验证。在你的 JavaScript 文件中添加以下代码:
fastify.decorate('authenticate', async function (request, reply) { try { await request.jwtVerify(); } catch (err) { reply.status(401); throw new Error('无效的 JWT 令牌'); } });
这将在 Fastify 实例上添加 Fastify-JWT 验证器,以确保 JWT 是有效的。
步骤 7: 启动 Fastify 应用程序
我们需要启动 Fastify 应用程序并开始监听端口以处理来自客户端的请求。在你的 JavaScript 文件中添加以下代码:
fastify.listen(3000, () => { console.log('Fastify 应用已启动'); });
这将启动 Fastify 应用程序并开始监听端口 3000,使其能够在本地网络上接收来自客户端的请求。
示例代码
下面是一段完整的示例代码,展示了如何使用 Fastify 和 JWT 实现身份验证和授权:
-- -------------------- ---- ------- ----- ------- - --------------------- ----- ---------- - ----------------------- ---------------------------- - ------- --------------- --- ---------------------- ----- --------- ------ -- - -- -------- ----- - --------- -------- - - ------------- -- -------- -- --------- --- ------- -- -------- --- ----------- - ------------------ ----- --- ------------------ - -- -- --- -- ----- ----- - ----- ------------------ -------- --- -- -- --- ------ ------------ ----- --- --- -------------------------------- ----- -------- --------- ------ - --- - ----- -------------------- - ----- ----- - ------------------ ----- --- ---------- --- ----- - --- ------------------------- - -------------- ---------------------- -- --------- ------ -- - ----- - -------- - - ------------- ------------------------------ --- -------------------- -- -- - -------------------- -------- ---
结论
在本文中,我们介绍了如何使用 Fastify 和 JWT 实现前端 Web 应用程序的身份验证和授权。Fastify 是一个快速、低开销和可扩展的 Node.js Web 框架,而 JWT 是一个标准的身份验证和授权方式。我们研究了如何在 Fastify 应用程序中添加 JWT 插件,并创建了一个身份验证路由、受保护的路由和身份验证函数。我们还展示了如何使用 Fastify 监听端口并处理客户端请求。这些步骤将使你能够在前端应用程序中使用现代、安全和可扩展的身份验证和授权。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f7e53cc5c563ced5b14190