Fastify 框架和 Passport.js 库集成指南

前言

Fastify 是一个快速、低开销、可扩展的 Node.js Web 框架,而 Passport.js 是一个 Node.js 的身份验证库。本文将介绍 Fastify 框架和 Passport.js 库的集成,帮助开发者快速搭建安全可靠的 Web 应用程序。

安装与配置

安装 Fastify 和 Passport.js

首先,需要安装 Fastify 和 Passport.js:

这里我们安装了 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


纠错
反馈