如何使用 Express.js 实现谷歌登录

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

在现代 Web 应用程序中,用户认证是至关重要的。许多 Web 应用程序都提供了与第三方平台进行认证的功能。这里介绍了如何使用 Express.js 框架来实现与谷歌的 OAuth2 认证,并获取谷歌用户的信息。

OAuth2 认证

OAuth2 是一种标准的用户认证协议。它是一个基于令牌的授权协议,用于在 Web 应用程序之间传输用户认证信息。 OAuth2 允许 Web 应用程序使用第三方平台(如谷歌)来进行用户认证,而不是自己验证用户的凭据。

在 OAuth2 中,客户端(应用程序)向授权服务器发送请求以获取访问资源的凭证。授权服务器要求用户授权,然后将访问令牌(access token)返回给客户端。客户端可以使用访问令牌来访问特定的资源。

使用 Express.js 实现谷歌登录

在下面的示例中,我们将使用 Express.js 和 Passport.js 库来实现 OAuth2 认证,并获取谷歌用户的信息。

准备工作

在开始之前,需要先申请 Google API 的 OAuth2 客户端 ID 和密钥。按照以下步骤进行:

  1. 登录到 Google API 控制台
  2. 选择您的项目,然后在左侧菜单中选择“凭据”。
  3. 单击“创建凭据”按钮,然后选择“OAuth 客户端 ID”。
  4. 选择“Web 应用程序”类型,然后输入应用程序名称和重定向 URI。
  5. 单击“创建”按钮,然后获取客户端 ID 和密钥。

将客户端 ID 和密钥复制并保存在应用程序的环境变量中,以供后续使用。

安装依赖

在开始之前,请确保已安装 Node.js 和 npm。然后在终端中创建一个新的 Express.js 项目,并安装以下依赖项:

--- ------- ------- -------- ---------------------- --------------- ------

配置 Passport 和 Express.js

在 app.js 文件中添加以下代码:

----- ------- - -------------------
----- ------- - ---------------------------
----- -------- - --------------------
----- -------------- - -------------------------------------------

----- --- - ----------
----- ---- - ---------------- -- -----

--------
  ---------
    ------- ---------
    ------- -----
    ------------------ ----
  --
--

-------------------------------
----------------------------

----------------------------- ----- -- ---------- -------
------------------------------- ----- -- ---------- -------

这将设置一个带有 express-session 和 passport 中间件的 Express.js 应用程序。我们还将使用 Passport 的 GoogleStrategy 模块来实现与谷歌的 OAuth2 认证。

在上面的示例代码中,我们设置了一个简单的序列化和反序列化用户对象的函数,以将用户信息保存在 Express.js 的会话(session)中。

实现 OAuth2 认证

在 app.js 文件中添加以下代码:

-------------
  --- ---------------
    -
      --------- ----------------------
      ------------- --------------------------
      ------------ ---------------------------------------------
      ------------------ ----
    --
    --------- ------------ ------------- -------- ----- -- -
      ------ ---------- ---------
    -
  -
--

------------ ----- ---- -- -
    ----- ---- - --- ------------------------ -- ---- ------------
    --------------------- - ---------------- -- -- ----------------------- --------- - ---------------
  -
--

--------
  ---------------
  ------------------------------- -
    ------ ---------------------------------------------------- -------------------------------------------------
  --
--

--------
  ------------------------
  ------------------------------- -
    ---------------- ----
    ---------------- ---
  --
--

---------------- -- -- ------------------- ------- -- ----------------------------

在上面的代码中,我们首先设置了一个 GoogleStrategy 实例,该实例使用 OAuth2 客户端 ID 和密钥来初始化。Passport 中的 authenticate()方法处理响应并向用户提供 Google 登录页面。

在回调URL中,我们使用 passport.authenticate()方法来完成用户认证。在成功后,我们将用户重定向到首页,并在会话中保存用户数据。如果用户不同意认证,他们将被重定向回首页。

请注意,我们获取了用户的 displayName、email 和 profile 图像等信息,这些信息可以用于在应用程序中显示用户个性化信息。还可以获取其他的 scope(请求范围)来获取更多的用户信息。

总结

在本文中,我们介绍了如何使用 Express.js 和 Passport.js 库来实现与谷歌的 OAuth2 认证,并获取谷歌用户的信息。通过使用这种方法,你的应用程序可以直接使用谷歌的用户身份验证,而不必再针对每个用户进行身份验证。这大大提高了应用程序的安全性和用户体验。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64b321c548841e9894f60575


猜你喜欢

  • RxJS 的 pipe 方法使用技巧详解

    前言 RxJS 是一个非常实用的前端库,它能够让开发者更好地处理异步数据流来构建响应式的应用程序。其中 pipe 方法是 RxJS 中最重要的方法之一,它能够帮助开发者对异步数据流进行组合和操作。

    1 年前
  • 如何使用 ECMAScript 2016 的 “可选参数”?

    ECMAScript 2016(ES7)是 JavaScript 的一个较新的标准,它为开发者提供了许多新的特性。其中之一就是“可选参数”,它允许函数在被调用时传入可选的参数。

    1 年前
  • Redis 中使用 Zset 实现热门文章排名的方法

    在互联网时代,热门文章排名是网站运营的重要指标之一。利用 Redis 中 Zset 有序集合模块实现热门文章排名的方法既高效又简便,为前端开发者提供了一种好的解决方案。

    1 年前
  • 如何在 Sequelize 中处理自定义数据类型

    Sequelize 是一个 Node.js ORM(对象关系映射)库,用于操作 SQL 数据库。它具有简单易用、灵活可扩展的特点,是现代全栈开发中使用最为广泛的 ORM 库之一。

    1 年前
  • ES11 中整数二进制,八进制和十六进制的新写法及其解释

    在 ES11 中,引入了新的整数写法,使得我们可以用更加简洁的方式表达二进制、八进制和十六进制数字。这些新的写法使得代码更加易读,同时也提高了代码的可维护性。在本文中,我们将详细介绍 ES11 中整数...

    1 年前
  • Express.js 中的模板引擎:EJS 和 Pug

    前言 在现代Web应用程序中,模板引擎是不可或缺的工具之一。它们可以以统一的方式呈现数据,使网站动态化并易于维护。 Express.js是一种流行的Node.js Web框架,提供了丰富的功能和强大的...

    1 年前
  • Next.js 中使用 fetch 的注意事项

    在 Next.js 中,如果需要使用前端的请求 API 接口的方法,一般会使用 fetch,同时也需要注意一些细节问题。 1. 安装 首先需要确保已经安装了 isomorphic-fetch 或者 c...

    1 年前
  • Web Components 中的生命周期及应用

    Web Components 是一种标准化的组件化开发方案,可以将组件封装成自定义元素,以达到复用性和可维护性。除了自定义元素,Web Components 还包括 Shadow DOM 和 HTML...

    1 年前
  • 谷歌开源工具 gVisor 在 Serverless 架构中的应用实践

    Serverless 架构是近年来云计算领域的一个热门话题。与传统架构相比,Serverless 架构更符合现代云计算场景中对资源的高效利用和成本优化的需求。但是,在 Serverless 架构中,容...

    1 年前
  • Kubernetes 中使用健康检查来调优服务

    作为前端开发人员,我们需要熟练掌握 Kubernetes 的使用,以确保我们的应用程序在容器集群中能够正常运行并调优服务。在 Kubernetes 中使用健康检查来调优服务是很重要的一种方法,本文将讨...

    1 年前
  • Enzyme 进阶 —— 测试 React 高阶组件

    在 React 中,高阶组件 (Higher-Order Components,简称 HOC) 是一种常见的技术,可以重用组件逻辑,增强组件功能。但是,测试 HOC 可能会有一些挑战。

    1 年前
  • Promise异步编程实践:并发请求控制和错误优化

    Promise是JavaScript异步编程的核心,它可以避免回调地狱和异步操作中的重复嵌套,使代码更加健壮和可读性更强。在这篇文章中,我们将探讨如何使用Promise来实现并发请求控制和错误优化,使...

    1 年前
  • 使用 Flexbox 实现多行文字的水平居中问题

    在前端开发中,经常需要实现多行文字水平居中的效果。虽然这个问题在过去比较难以解决,但现在使用 Flexbox 已经可以轻松地实现了。本文将介绍如何使用 Flexbox 实现多行文字的水平居中问题,并提...

    1 年前
  • TypeScript 中如何使用泛型接口

    什么是泛型接口? 在 TypeScript 中,泛型可以帮助我们减少代码的重复程度,并且能够更好地管理类型。泛型就是将类型参数化,使得代码可以适用于多种类型,而泛型接口则是将接口中的某些类型参数化,从...

    1 年前
  • 如何设置 Mocha 测试框架的超时时间?

    什么是 Mocha? Mocha 是一个 JavaScript 测试框架,可以运行在浏览器和 Node.js 环境中。它支持多种测试方式,包括 BDD(行为驱动开发)、TDD(测试驱动开发)以及文档测...

    1 年前
  • LESS 中如何使用伪类选择器

    LESS 中如何使用伪类选择器 LESS 是一种动态样式语言,是一种 CSS 预处理器,可以帮助开发人员更方便地管理和维护复杂的 CSS 代码。在 LESS 中,我们可以使用标准的 CSS 语法,同时...

    1 年前
  • 在 Fastify 中使用 Redis 的最佳实践

    在 Fastify 中使用 Redis 的最佳实践 Redis 是一个开源的高性能缓存数据库系统,也是一个非常流行的网络应用程序缓存系统。在前端开发中,我们通常需要使用 Redis 来保存一些临时数据...

    1 年前
  • Headless CMS 如何解决图文并茂文章的排版问题

    在传统的 CMS 系统中,一篇文章通常是一个整体,包括标题、文本、图片、视频等等。而在实际开发中,我们常常需要将这些不同的元素灵活排版,以达到更好的视觉效果和阅读体验。

    1 年前
  • Mongoose 中文文档及 API 手册入门使用教程

    1. 简介 Mongoose 是一个针对 MongoDB 数据库的对象模型库,提供了更高级的方法来处理对象的操作,例如:增删改查、数据验证、中间件等。 使用 Mongoose 可以更加方便地与 Mon...

    1 年前
  • Jest 测试 React 组件性能的最佳实践

    在前端开发中,我们常常需要测试 React 组件的性能和可靠性,以确保它们能够正常运行并满足用户需求。而 Jest 是目前最受欢迎的前端测试框架之一,它能够为我们提供可靠的测试工具,使我们能够更加高效...

    1 年前

相关推荐

    暂无文章