JWT(JSON Web Token)是一种无状态的、可扩展的身份验证机制,广泛应用于前后端分离的应用程序中。Fastify 作为一款快速的 Node.js Web 框架,提供了简单易用的插件机制,实现 JWT 鉴权也非常简单。
准备工作
在开始实现 JWT 鉴权前,需要先安装 fastify-jwt
和 jsonwebtoken
插件:
$ npm install fastify-jwt jsonwebtoken
生成 JWT
在权限验证成功时,需要生成 JWT。首先在 fastify
实例中注册插件:
const fastify = require('fastify')() const fastifyJwt = require('fastify-jwt') const secret = 'mysecret' // 自定义的 secret fastify.register(fastifyJwt, { secret })
在路由处理函数中生成 JWT:
fastify.post('/login', async (request, reply) => { const { username, password } = request.body // 假设用户登录成功,生成 JWT const token = await fastify.jwt.sign({ username }) reply.send({ token }) })
上述代码中,fastify.jwt.sign
方法用于生成 JWT,参数为需要包含在 JWT 中的信息,包括用户名、角色等。
鉴权
在路由处理函数前执行鉴权,判断请求中是否包含有效的 JWT:
fastify.get('/user', { preHandler: fastify.authenticate }, async (request, reply) => { const { username } = request.user // 获取 JWT 中的信息 // 获取用户信息 const user = await userService.getUserByName(username) reply.send(user) })
上述代码中,fastify.authenticate
是一个 middleware,用于验证请求是否包含有效的 JWT。如果验证成功,request.user
中包含 JWT 中的信息。
实现鉴权的核心代码如下:
-- -------------------- ---- ------- ----- ------------ - ----- --------- ------ -- - --- - ----- ------------------- - ----- ----- - --------------- - - -------------------------------- -------------
上述代码中,在 Fastify 实例中定义了 authenticate
方法,将其添加到路由处理函数的 preHandler
中,实现对路由的鉴权认证。
示例代码
完整的示例代码如下:
-- -------------------- ---- ------- ----- ------- - -------------------- ----- ---------- - ---------------------- ----- --- - ----------------------- ----- ----------- - ------------------------ ----- ------ - ---------- ---------------------------- - ------ -- ----- ------------ - ----- --------- ------ -- - --- - ----- ------------------- - ----- ----- - --------------- - - -------------------------------- ------------- ---------------------- ----- --------- ------ -- - ----- - --------- -------- - - ------------ -- ----------- --- ----- ----- - ----- ------------------ -------- -- ------------ ----- -- -- -------------------- - ----------- -------------------- -- ----- --------- ------ -- - ----- - -------- - - ------------ -- -- --- ---- -- ------ ----- ---- - ----- ----------------------------------- ---------------- -- -------------------- ----- -------- -- - -- ----- - ---------------- --------------- - ------------------- --------- -- ------------ --
总结
通过 Fastify 插件机制实现 JWT 鉴权非常简单,只需使用 fastify-jwt
插件即可。在路由处理函数前添加 middleware 实现对请求的鉴权认证。同时,需要注意保护好自定义的 secret
,避免泄露给未授权的人员。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645c4fb0968c7c53b0ea0900