在现代 Web 开发中,用户认证和授权是一个必不可少的功能。Google OAuth 提供了一种简单而安全的方式来实现用户认证和授权,而 Passport.js 是一个流行的 Node.js 认证中间件库,可以帮助我们轻松地集成 Google OAuth 认证。
Fastify 是一个快速、低开销、灵活的 Web 框架,它支持异步编程和速度优化,因此非常适合构建高性能的 Web 应用程序。在本文中,我们将介绍如何在 Fastify 中使用 Passport.js 实现 Google OAuth 认证。
准备工作
在开始之前,我们需要完成以下准备工作:
- 在 Google API Console 中创建一个项目,并启用 Google+ API。
- 创建一个 Google OAuth 应用程序,并获取客户端 ID 和客户端密钥。
- 安装 Fastify、Passport 和相关的 Passport 策略。
实现步骤
接下来,我们将按照以下步骤实现 Google OAuth 认证:
- 配置 Passport.js 和 Google OAuth2 策略。
- 创建路由来处理 Google OAuth 认证请求。
- 创建路由来处理 Google OAuth 认证回调请求。
- 在路由中使用 Passport.js 进行认证。
配置 Passport.js 和 Google OAuth2 策略
首先,我们需要配置 Passport.js 和 Google OAuth2 策略。在 Fastify 应用程序中,我们可以使用 fastify-passport
插件来轻松地集成 Passport.js。
-- -------------------- ---- ------- ----- ------- - -------------------- ----- -------- - ------------------- ----- -------------- - ------------------------------------------- ----- --------------- - --------------------------- ---------------------------------------------- ------------------------------------------------- ---------------- ---------------- --------- ----------------------------- ------------- --------------------------------- ------------ -------------------------------------------- -- ------------- ------------- -------- ----- -- - -- ------------ --- --------------------------- -------------------------------------- - ------ ----------- --- ------------------------------------ -------------------------------------- - ---------------- --- --- ----- ------ -- - -- --------- --
在上面的代码中,我们首先导入了必要的模块,包括 passport
、passport-google-oauth20
和 fastify-passport
。然后,我们在 Fastify 应用程序中注册了 fastify-passport
插件,并配置了 Passport.js 和 Google OAuth2 策略。
在配置 Google OAuth2 策略时,我们需要提供客户端 ID、客户端密钥和回调 URL。在本例中,我们将回调 URL 设置为 http://localhost:3000/auth/google/callback
。
最后,我们定义了两个路由来处理 Google OAuth 认证请求和认证回调请求。在 '/auth/google'
路由中,我们使用 fastifyPassport.authenticate()
方法来发起 Google OAuth 认证请求,并指定了需要请求的权限范围。在 '/auth/google/callback'
路由中,我们使用 fastifyPassport.authenticate()
方法来处理 Google OAuth 认证回调请求,并在认证成功后重定向到首页。
创建路由来处理 Google OAuth 认证请求
接下来,我们需要创建一个路由来处理 Google OAuth 认证请求。在该路由中,我们将使用 fastifyPassport.authenticate()
方法来发起 Google OAuth 认证请求,并指定所需的权限范围。
fastify.get('/auth/google', fastifyPassport.authenticate('google', { scope: ['profile'] }))
在上面的代码中,我们定义了一个 '/auth/google'
路由,并在其中使用 fastifyPassport.authenticate()
方法来发起 Google OAuth 认证请求。我们还指定了需要请求的权限范围,这里我们只请求了 profile
范围。
创建路由来处理 Google OAuth 认证回调请求
接下来,我们需要创建一个路由来处理 Google OAuth 认证回调请求。在该路由中,我们将使用 fastifyPassport.authenticate()
方法来处理 Google OAuth 认证回调请求,并在认证成功后重定向到首页。
fastify.get('/auth/google/callback', fastifyPassport.authenticate('google', { failureRedirect: '/' }), (req, reply) => { reply.redirect('/') })
在上面的代码中,我们定义了一个 '/auth/google/callback'
路由,并在其中使用 fastifyPassport.authenticate()
方法来处理 Google OAuth 认证回调请求。我们还指定了在认证失败时的重定向 URL。
在认证成功后,我们将用户重定向到首页。
在路由中使用 Passport.js 进行认证
最后,我们需要在路由中使用 Passport.js 进行认证。我们可以使用 fastifyPassport.authenticate()
方法来保护需要认证的路由。
fastify.get('/profile', fastifyPassport.authenticate('google', { failureRedirect: '/' }), (req, reply) => { reply.send(`Hello, ${req.user.displayName}!`) })
在上面的代码中,我们定义了一个 '/profile'
路由,并在其中使用 fastifyPassport.authenticate()
方法来保护该路由。在路由处理程序中,我们可以访问 req.user
对象来获取当前认证用户的信息。
示例代码
下面是一个完整的示例代码,演示了如何在 Fastify 中使用 Passport.js 实现 Google OAuth 认证。
-- -------------------- ---- ------- ----- ------- - -------------------- ----- -------- - ------------------- ----- -------------- - ------------------------------------------- ----- --------------- - --------------------------- ---------------------------------------------- ------------------------------------------------- ---------------- ---------------- --------- ----------------------------- ------------- --------------------------------- ------------ -------------------------------------------- -- ------------- ------------- -------- ----- -- - -- ------------ --- ---------------- ----- ------ -- - -------------- ------------------------ -- ---- ------------ -- --------------------------- -------------------------------------- - ------ ----------- --- ------------------------------------ -------------------------------------- - ---------------- --- --- ----- ------ -- - ------------------- -- ----------------------- -------------------------------------- - ---------------- --- --- ----- ------ -- - ------------------ -------------------------- -- -------------------- ----- -- - -- ----- - ------------------ --------------- - ------------------- --------- -- ----------------------- --
总结
在本文中,我们介绍了如何在 Fastify 中使用 Passport.js 实现 Google OAuth 认证。我们首先配置了 Passport.js 和 Google OAuth2 策略,然后创建了路由来处理 Google OAuth 认证请求和认证回调请求。最后,我们在路由中使用 Passport.js 进行认证。希望本文能够帮助你轻松地实现用户认证和授权功能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650fddff95b1f8cacd88dadb