Fastify 是一个快速、低开销且可扩展的 Web 框架,适用于构建高性能 Web 应用程序。在实际开发中,我们通常需要对用户进行身份验证,以确保只有授权的用户才能访问受保护的资源。JWT(JSON Web Token)是一种广泛使用的身份验证机制,它可以在不使用服务器端存储的情况下验证用户身份。在本文中,我们将介绍如何在 Fastify 框架中实现 JWT 身份验证。
JWT 简介
JWT 是一种基于 JSON 的开放标准(RFC 7519),用于在网络应用程序之间安全地传输声明。JWT 通常用于身份验证和授权。JWT 由三部分组成:头部、载荷和签名。头部包含 JWT 类型和使用的算法;载荷包含实际的声明,如用户 ID、用户名和过期时间;签名用于验证 JWT 的完整性。JWT 可以在客户端和服务器之间安全地传输,并且不需要存储在服务器上。
实现 JWT 身份验证
在 Fastify 框架中实现 JWT 身份验证需要以下步骤:
步骤 1:安装依赖
首先,我们需要安装 fastify-jwt
和 jsonwebtoken
两个依赖项。fastify-jwt
是一个 Fastify 插件,用于生成和验证 JWT。jsonwebtoken
是一个 JSON Web Token 库,用于生成和验证 JWT。
npm install fastify-jwt jsonwebtoken --save
步骤 2:注册插件
在 Fastify 应用程序中注册 fastify-jwt
插件,并配置 JWT 密钥和选项。以下是一个示例代码:
const fastify = require('fastify')() fastify.register(require('fastify-jwt'), { secret: 'supersecret' })
在上面的代码中,我们将 fastify-jwt
插件注册到 Fastify 应用程序中,并设置 JWT 密钥为 supersecret
。
步骤 3:实现身份验证路由
现在,我们可以创建一个受保护的路由,该路由需要进行身份验证才能访问。以下是一个示例代码:
fastify.get('/protected', { preValidation: fastify.authenticate }, (request, reply) => { reply.send({ message: 'Hello, protected world!' }) })
在上面的代码中,我们使用 fastify.authenticate
预处理程序来验证 JWT。fastify.authenticate
验证 JWT 并将 request.user
对象设置为有效载荷(payload)。
步骤 4:实现身份验证
现在,我们需要实现身份验证。以下是一个示例代码:
fastify.decorate('authenticate', async function (request, reply) { try { await request.jwtVerify() } catch (err) { reply.send(err) } })
在上面的代码中,我们使用 fastify.decorate
方法将 authenticate
方法添加到 Fastify 应用程序中。authenticate
方法使用 request.jwtVerify()
方法来验证 JWT。如果 JWT 无效,则将错误发送回客户端。
步骤 5:生成 JWT
现在,我们需要生成 JWT。以下是一个示例代码:
fastify.post('/login', async (request, reply) => { const { username, password } = request.body // Validate user credentials const user = await validateCredentials(username, password) if (!user) { reply.status(401).send({ message: 'Invalid credentials' }) return } // Generate JWT const token = fastify.jwt.sign({ id: user.id }) reply.send({ token }) })
在上面的代码中,我们创建一个 /login
路由来验证用户凭据并生成 JWT。如果用户凭据无效,则返回状态码 401。如果用户凭据有效,则使用 fastify.jwt.sign
方法生成 JWT,并将其发送回客户端。
总结
本文介绍了如何在 Fastify 框架中实现 JWT 身份验证。我们首先安装了 fastify-jwt
和 jsonwebtoken
两个依赖项,然后注册了 fastify-jwt
插件,并配置了 JWT 密钥和选项。接下来,我们创建了一个受保护的路由,并使用 fastify.authenticate
预处理程序来验证 JWT。最后,我们实现了身份验证和 JWT 生成代码。通过本文,我们可以了解如何在 Fastify 应用程序中使用 JWT 身份验证来保护受保护的资源。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658cdd4ceb4cecbf2d2aee8a