前言
Fastify 是一个快速、低开销、可扩展的 Node.js Web 框架,而 Passport.js 是一个 Node.js 的身份验证库。本文将介绍 Fastify 框架和 Passport.js 库的集成,帮助开发者快速搭建安全可靠的 Web 应用程序。
安装与配置
安装 Fastify 和 Passport.js
首先,需要安装 Fastify 和 Passport.js:
npm install fastify passport passport-local fastify-passport
这里我们安装了 Fastify、Passport.js、Passport-local 和 fastify-passport,后者是 Fastify 框架的 Passport.js 插件。
配置 Passport.js
接下来,我们需要配置 Passport.js。在 Fastify 应用程序中,我们可以在 register
函数中设置 Passport.js:
const fastify = require('fastify')() const passport = require('passport') const LocalStrategy = require('passport-local').Strategy const fastifyPassport = require('fastify-passport') // 配置本地策略 passport.use(new LocalStrategy( function (username, password, done) { // 在这里验证用户名和密码 if (username === 'admin' && password === 'password') { return done(null, { username: 'admin' }) } else { return done(null, false, { message: 'Incorrect username or password.' }) } } )) // 配置序列化和反序列化 passport.serializeUser(function (user, done) { done(null, user.username) }) passport.deserializeUser(function (id, done) { done(null, { username: id }) }) // 注册 fastify-passport 插件 fastify.register(fastifyPassport.initialize()) fastify.register(fastifyPassport.secureSession()) // 配置登录路由 fastify.post('/login', { preHandler: fastify.passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' }) }, async (request, reply) => { reply.send({ message: 'Login successful' }) }) // 配置保护路由 fastify.get('/protected', { preHandler: fastify.passport.authenticate('session') }, async (request, reply) => { reply.send({ message: 'You are authenticated' }) })
在上面的代码中,我们首先配置了本地策略,用于验证用户名和密码。然后,我们配置了序列化和反序列化函数,用于在 Passport.js 中处理用户身份验证。
接下来,我们注册了 fastify-passport 插件,并配置了登录和保护路由。登录路由使用 fastify.passport.authenticate
中间件进行身份验证,如果验证成功,会重定向到主页,否则会重定向到登录页面。保护路由使用 fastify.passport.authenticate('session')
中间件进行身份验证,只有已经登录的用户才能访问。
配置 Fastify
最后,我们需要配置 Fastify。在 Fastify 应用程序中,我们可以使用以下代码来启动服务器:
fastify.listen(3000, (err, address) => { if (err) { console.error(err) process.exit(1) } console.log(`Server listening on ${address}`) })
上面的代码将启动一个监听 3000 端口的 Fastify 服务器。
示例代码
下面是一个完整的 Fastify 应用程序,集成了 Passport.js:
const fastify = require('fastify')() const passport = require('passport') const LocalStrategy = require('passport-local').Strategy const fastifyPassport = require('fastify-passport') // 配置本地策略 passport.use(new LocalStrategy( function (username, password, done) { // 在这里验证用户名和密码 if (username === 'admin' && password === 'password') { return done(null, { username: 'admin' }) } else { return done(null, false, { message: 'Incorrect username or password.' }) } } )) // 配置序列化和反序列化 passport.serializeUser(function (user, done) { done(null, user.username) }) passport.deserializeUser(function (id, done) { done(null, { username: id }) }) // 注册 fastify-passport 插件 fastify.register(fastifyPassport.initialize()) fastify.register(fastifyPassport.secureSession()) // 配置登录路由 fastify.post('/login', { preHandler: fastify.passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' }) }, async (request, reply) => { reply.send({ message: 'Login successful' }) }) // 配置保护路由 fastify.get('/protected', { preHandler: fastify.passport.authenticate('session') }, async (request, reply) => { reply.send({ message: 'You are authenticated' }) }) // 启动服务器 fastify.listen(3000, (err, address) => { if (err) { console.error(err) process.exit(1) } console.log(`Server listening on ${address}`) })
总结
本文介绍了 Fastify 框架和 Passport.js 库的集成,帮助开发者快速搭建安全可靠的 Web 应用程序。我们学习了如何在 Fastify 应用程序中配置 Passport.js,以及如何使用 Passport.js 进行身份验证。希望本文对你有所帮助!
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658ccd10eb4cecbf2d291e39