在 Web 应用程序中,身份验证是一个非常常见的需求,因为需要确保只有经过授权的用户才能访问某些页面或执行某些操作。Passport 是一个流行的 Node.js 中间件,它可以帮助开发人员轻松地实现用户身份验证和授权。
Fastify 是一个快速和低开销(low overhead)的 Web 框架,支持插件系统,开发人员可以将 Passport 作为一个插件集成到 Fastify 应用程序中。在本文中,我们将探讨如何在 Fastify 中使用 Passport 进行用户身份验证。
安装和设置
首先,需要安装 fastify-passport
和 passport
这两个依赖包。可以使用 npm 命令行工具进行安装:
npm install fastify-passport passport
在 Fastify 应用程序中安装并配置 fastify-passport
:
const fastify = require('fastify')() const fastifyPassport = require('fastify-passport') fastify.register(fastifyPassport.initialize()) fastify.register(fastifyPassport.secureSession())
这里我们初始化了 Passport,并添加了 secureSession()
插件,以确保当前用户的会话是安全的。
接下来,需要定义一个 Passport 策略(strategy)以实现身份验证。Passport 包含多种身份验证策略,例如本地身份验证、OAuth 身份验证、OpenID 身份验证等。在此示例中,我们将使用本地身份验证策略。
-- -------------------- ---- ------- ----- ------------- - ---------------------------------- ---------------- -------------- ---------- --------- ----- -- - -- -- -------- - -------- -------- -- --------- --- ------- -- -------- --- ----------- - ------ ---------- - --------- ------- -- - ------ ---------- ------ - --
在此示例中,LocalStrategy
使用用户名和密码进行身份验证,如果验证通过,则返回一个包含用户信息的对象。否则,将返回一个 false
值。
接下来,需要配置 Passport 以序列化和反序列化用户对象。序列化用于将用户对象转换为字符串,反序列化用于将字符串转换为用户对象。
passport.serializeUser((user, done) => { done(null, user.username) }) passport.deserializeUser((id, done) => { done(null, { username: id }) })
最后,需要定义一个路由来执行身份验证。在此示例中,我们将使用 fastify-formbody
插件来解析 POST 请求正文中的表单数据。
-- -------------------- ---- ------- ----- -------- - --------------------------- -------------------------- ---------------------- - ------- - ----- - ----- --------- --------- ------------ ------------ ----------- - --------- - ----- -------- -- --------- - ----- -------- - - - - -- ----- ------ -- - ------------------------------ ----- ----- ----- -- - -- ----- - --------------- ------ - -- ------- - ------------ -------- ---------- -- ------ - --------------- ----- -- - -- ----- - --------------- ------ - ------------ -------- ------ -- -- ------- ------ --
在此路由中,我们使用 passport.authenticate()
函数来执行身份验证。如果验证通过,req.logIn()
函数将为当前用户创建一个会话。
结论
在本文中,我们介绍了如何使用 Passport 在 Fastify 应用程序中实现用户身份验证和授权。通过将 Passport 作为 Fastify 插件,可以轻松地将身份验证添加到应用程序中。除了本地身份验证策略之外,Passport 还支持多种身份验证策略,可以根据应用程序的需要选择合适的策略。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f04d606fbf96019732a05f