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:
const fastify = require('fastify')({ logger: true }) const JWT_SECRET = 'supersecret' fastify.register(require('fastify-jwt'), { secret: JWT_SECRET }) fastify.register(async function (fastify, opts) { const MongoClient = require('mongodb').MongoClient const url = 'mongodb://localhost:27017' const dbName = 'test-db' const client = await MongoClient.connect(url, { useNewUrlParser: true }) const db = client.db(dbName) fastify.decorate('mongo', { db, users: db.collection('users'), }) }) fastify.listen(3000, function (err, address) { if (err) { fastify.log.error(err) process.exit(1) } fastify.log.info(`server listening on ${address}`) })
- 然后,创建一个路由来处理用户身份验证。在此路由中,将检查用户提供的凭据是否与数据库中的记录匹配。如果验证成功,则向用户提供一个 JWT。
fastify.post('/login', async function (request, reply) { const { email, password } = request.body const user = await fastify.mongo.users.findOne({ email }) if (!user) { reply.send(401, { message: 'Authentication failed' }) } if (password !== user.password) { reply.send(401, { message: 'Authentication failed' }) } const token = fastify.jwt.sign({ id: user._id }) reply.send({ token }) })
- 最后,创建一个受保护的路由。在此路由中,将检查用户提供的 JWT 是否有效。如果有效,则返回受保护的内容。否则,返回 401。
fastify.get('/protected', async function (request, reply) { try { await request.jwtVerify() } catch (err) { reply.send(401, { message: 'Authentication failed' }) } reply.send({ message: 'This is a protected route' }) })
完整代码可以在 GitHub 上找到。
总结
本教程介绍了如
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65acd91aadd4f0e0ff66b5e4