Fastify 是一个快速、低开销的 Web 框架,它支持异步处理和插件化架构。fastify-auth 是 Fastify 的一个插件,它提供了一种简单的方式来验证用户的身份,并保护 API 端点免受未经授权的访问。本文将介绍 fastify-auth 的使用方法,包括如何配置和使用该插件。
安装
首先,需要安装 Fastify 和 fastify-auth 插件。可以使用 npm 进行安装:
npm install fastify fastify-auth
配置
在 Fastify 应用程序中使用 fastify-auth 插件需要进行一些配置。下面是一个基本的配置示例:
// javascriptcn.com 代码示例 const fastify = require('fastify')(); const auth = require('fastify-auth'); fastify.register(auth); fastify.decorate('authenticate', async (request, reply) => { try { await request.jwtVerify(); } catch (err) { reply.send(err); } }); fastify.decorate('authorize', (request, reply, done) => { const role = request.headers['x-role']; if (role === 'admin') { done(); } else { reply.code(401).send({ error: 'Unauthorized' }); } }); fastify.addHook('preHandler', (request, reply, done) => { fastify.authenticate(request, reply); fastify.authorize(request, reply, done); });
上面的代码中,我们首先将 fastify-auth 插件注册到 Fastify 应用程序中。然后,我们使用 decorate
方法添加了两个新的方法:authenticate
和 authorize
。authenticate
方法用于验证用户的身份,authorize
方法用于验证用户是否有访问特定端点的权限。最后,我们使用 addHook
方法将这两个方法添加到 Fastify 的 preHandler
钩子中,以确保每个请求都经过身份验证和授权。
使用
在 Fastify 应用程序中使用 fastify-auth 插件非常简单。只需像这样使用 authenticate
和 authorize
方法:
fastify.get('/protected', async (request, reply) => { reply.send({ message: 'Protected endpoint' }); }).addHook('preHandler', fastify.authenticate).addHook('preHandler', fastify.authorize);
上面的代码中,我们定义了一个受保护的端点 /protected
。我们使用 addHook
方法将 authenticate
和 authorize
方法添加到 preHandler
钩子中,以确保该端点只能被经过身份验证和授权的用户访问。
示例代码
下面是一个完整的 Fastify 应用程序示例,其中包括 fastify-auth 插件的使用:
// javascriptcn.com 代码示例 const fastify = require('fastify')(); const auth = require('fastify-auth'); fastify.register(auth); fastify.decorate('authenticate', async (request, reply) => { try { await request.jwtVerify(); } catch (err) { reply.send(err); } }); fastify.decorate('authorize', (request, reply, done) => { const role = request.headers['x-role']; if (role === 'admin') { done(); } else { reply.code(401).send({ error: 'Unauthorized' }); } }); fastify.addHook('preHandler', (request, reply, done) => { fastify.authenticate(request, reply); fastify.authorize(request, reply, done); }); fastify.get('/', async (request, reply) => { reply.send({ message: 'Hello World' }); }); fastify.get('/protected', async (request, reply) => { reply.send({ message: 'Protected endpoint' }); }).addHook('preHandler', fastify.authenticate).addHook('preHandler', fastify.authorize); fastify.listen(3000, (err) => { if (err) throw err; console.log('Server listening on port 3000'); });
在上面的代码中,我们定义了两个端点:/
和 /protected
。/
端点是公共端点,任何人都可以访问它。/protected
端点是受保护的端点,只有经过身份验证和授权的用户才能访问它。我们使用 addHook
方法将 authenticate
和 authorize
方法添加到 /protected
端点的 preHandler
钩子中,以确保该端点只能被经过身份验证和授权的用户访问。
总结
fastify-auth 是一个非常有用的 Fastify 插件,它提供了一种简单的方式来验证用户的身份,并保护 API 端点免受未经授权的访问。在本文中,我们介绍了 fastify-auth 的使用方法,包括如何配置和使用该插件。我们还提供了一个完整的 Fastify 应用程序示例,以演示 fastify-auth 插件的使用。希望本文能够帮助你更好地理解 fastify-auth 插件,并在实际开发中运用它。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65782f6fd2f5e1655d214f6d