如何使用 Express.js 和 OAuth2.0 实现第三方登录功能

在现代web应用中,用户登录系统已成为一个必备的功能,但是在传统的用户名和密码登录以外,第三方登录逐渐成为了另外一种常见的方式。使用第三方账号来登录,不仅方便用户使用,并且可以大大减少用户的注册流程,同时也有助于拓宽我们的用户范围。在本文中,我们将学习如何使用 Express.js 和 OAuth2.0 来实现第三方登录功能。

OAuth2.0 是什么?

OAuth2.0(开放授权2.0)是一个被广泛使用的授权框架。本质上,OAuth2.0 允许用户授权第三方应用访问其数据,而无需提供这些应用登录凭据。这使得第三方应用可以以用户的身份访问数据,但又不会暴露原始的凭据信息。

要实现 OAuth2.0 授权,我们需要使用到几个核心的概念:

  • OAuth2.0 客户端,该客户端提供服务(诸如Google,Facebook,Twitter等等),接受第三方应用授权请求。
  • 用户,该用户拥有客户端所需要的信息,比如用户名和密码等等。
  • 授权服务器,该服务器接受来自第三方应用的授权请求,并且向客户端确认用户身份,并将访问令牌发给授权请求。

Express.js 与 Passport.js

我们将使用 Express.js 框架和它的组件 Passport.js 来实现 OAuth2.0 的授权流程。Express.js 是一个灵活且快速的 Node.js 库,它可用于构建具有众多路由的web应用程序,并与其他库和组件完美配合。而 Passport.js 则是一个 Node.js 库,提供了一些现成的策略来实现 OAuth2.0 授权。其中包括与 Google,Facebook等第三方平台进行通信的策略。

实现第三方登录的授权流程

接下来,我们将概述实现第三方授权登录的步骤。在本教程中,我们将以 Google 作为我们的例子。

步骤一:将 google-auth-library 添加到我们的Express.js 应用中

我们将通过 npm 安装 google-auth-library 库来与 Google 进行通信。打开我们的终端,切换到我们的项目目录,并输入以下命令来安装该库:

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

步骤二:在 Google API Console 中创建客户端ID

我们需要在 Google API Console 中创建我们的 OAuth2.0 客户端 ID。首先,转到 API Console 并登录。然后单击“创建项目”并为该项目命名。接下来,我们要启用 Google+ API,以便我们的应用程序与 Google 进行通信。在“库”选项卡中搜索“Google+ API”并启用此API即可。

创建项目后,选择左侧导航菜单中的“凭据”选项卡,并单击“创建凭据”按钮。在弹出的下拉菜单中选择“OAuth客户端ID”。选择“网页应用程序”选项和应用名称后,您将需要在“授权重定向URIs”下为您的应用程序添加重定向URL。这应该是您希望将授权令牌发送回的网址。如果不知道,可以在本地计算机上为调试URL使用“http://localhost:/auth/google/callback”。在此处,我们可以使用第三方平台提供的详细信息设置好客户端ID和秘钥等信息。

步骤三:在我们的应用程序中设置授权流程

在我们的应用程序中,我们将创建路由器,以便能够处理与 OAuth2.0 授权有关的交易。添加以下代码来设置我们的 Passport.js 包括 Google 策略:

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

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

在这个简单的代码块中,我们使用 Passport.js 和 GoogleStrategy,作为我们与 Google进行 OAuth2.0 交流的策略。在此处,我们使用Google提供的“Client ID”和“Client Secret”信息。还提供一个回调URL以在授权结果发生时执行。

步骤四:设置我们的路由器,以处理我们的认证过程

我们现在需要设置Express.js路由器,并将其映射到我们的Google认证过程。这是我们路由器的代码,包括两个端点:一个用于开始认证,另一个用于在完成认证后接受回调。

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

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

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

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

在这个代码块中,我们定义了两个路由器。第一个,作为开始第三方认证的初始端点,将重定向到 Google 登录页面向用户提供 Google 认证的服务。我们还向 Passport.js 提供了我们希望在授权过程中访问的任何特定权限,这里是我们希望访问的用户“profile”。

第二个路由器则是在完成认证后接受回调,该路由器将被传递返回的授权令牌,然后将我们的授权过程完成并在我们的本地发送授权令牌。

步骤五:向路由器添加新的端点

我们将添加一个新的端点,以便在成功从 Google 返回授权令牌时显示用户信息。使用以下代码在我们的路由文件中添加它:

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

当用户成功授权时,我们将返回一个 JSON 对象,其中包含您从 Google 收到的所有相关信息,例如如下所示:

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

运行以上代码会在你的默认端口上启动一个 web 服务器,现在可以访问“http://localhost:3000/auth/google”了。打开该网址并完成Google授权过程,再打开“http://localhost:3000/auth/google/success”即可查看授权结果。

总结

在本篇文章中,我们介绍了如何使用 Express.js 和 OAuth2.0 来实现第三方登录功能。通过使用 Passport.js 与 Google 进行通信,我们可以轻松地实现 OAuth2.0 的授权流程,实现更灵活的登录方式。

虽然这个流程看似简单,但当我们真正实现时,往往需要多次调试。开发者只有真正的理解了 OAuth2.0 的授权流程,才能够更好地实现第三方登录功能。希望这篇文章能够为你提供帮助和指导,在实现第三方登录方面有所裨益。

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


猜你喜欢

  • 使用 Babel 和 Webpack 开发 Angular2 应用

    在现代前端开发中,Babel 和 Webpack 都是非常常见的工具。Babel 可以让你使用最新的 JavaScript 语言特性,而 Webpack 可以自动化打包、优化和压缩你的代码。

    1 年前
  • CSS Flexbox 实现流式布局方案

    什么是流式布局? 流式布局又称为响应式布局,是指随着屏幕尺寸的变化,网页内容会自动的调整布局以适应不同设备的展示。流式布局是现代 Web 设计必不可少的技术,因为人们现在使用各种不同的设备来访问网站,...

    1 年前
  • 优化 Angular 应用的性能:RxJS 中的细节

    RxJS 是 Angular 框架中的一个核心库,它提供了强大的响应式编程能力,使得我们可以更加快速和高效的编写前端应用。然而,在实际的项目中,我们常常会面临性能问题,造成应用的卡顿和响应变慢,这时候...

    1 年前
  • 使用 Mocha 和 SuperTest 进行接口自动化测试

    随着前端开发的不断发展,现代化的Web应用程序架构变得越来越复杂。在开发过程中,无论您是在开发单页面应用,还是传统的多页面应用程序,都必须确保API接口的可靠性和正确性,以及客户端与服务端的协调配合。

    1 年前
  • Mongoose 中的 Embeds 和 Refs 使用技巧

    前言 Mongoose 是一个 MongoDB 处理库,它提供了一种简单的方式,来为你的应用创建数据库模型。Mongoose 支持多种数据类型,其中包括嵌套的数据类型。

    1 年前
  • 如何在 Redux 中实现请求 OAuth 数据的最佳实践

    OAuth 是一种授权机制,用于允许一个应用程序访问另一个应用程序的用户数据。在前端应用程序中,我们通常会使用 OAuth 作为用户身份验证和访问授权的一种方式,以访问第三方 API。

    1 年前
  • Socket.io 如何使用 websocket 代替 polling 传输方式

    前言 在前端开发过程中,我们经常需要使用实时通信(Real-Time Communication,简称 RTC)功能,比如与服务器进行双向数据传输。而传统的轮询(polling)方式虽然能够实现实时通...

    1 年前
  • 如何设计 RESTful API 的错误码和错误信息

    在设计 RESTful API 的过程中,错误码和错误信息的设计是非常重要的。合理的错误码和错误信息可以提高 API 的可用性和易用性,同时也可以帮助开发人员更快地定位并解决问题。

    1 年前
  • ECMAScript 2019:一词限流解决 JavaScript 的性能问题

    JavaScript 是现今最为流行的编程语言之一,但其性能问题一直受到诟病。为了解决这一问题,ECMAScript 2019 引入了一项新特性——一词限流(Word Limiting),其可以大幅提...

    1 年前
  • 如何在 Fastify 应用中使用 GraphQL

    前言 GraphQL 是一种用于API(应用程序接口)的查询语言,于2015年被Facebook发布,并迅速在业界流行起来。随着前后端分离的趋势,GraphQL 也逐渐成为前端开发人员的重要工具之一。

    1 年前
  • [Sequelize] 如何自定义校验器 validator/unique-validator

    在 Sequelize 中,校验器是一个关键的部分,它用于验证传递给模型的数据是否有效。 Sequelize 自带有一些常见的校验器,比如 notEmpty、isEmail、isUrl 等等。

    1 年前
  • Promise 和 Generator 函数配合使用的高级技巧

    前言 Promise 和 Generator 函数都是 ES6 引入的重要特性,它们分别解决了异步编程和迭代器的问题。但是单独使用它们还不够,只有将它们结合使用才能发挥出更大的威力。

    1 年前
  • HapiJS Request 数据验证详解

    在前端开发中,数据验证是非常重要的一环。通过对请求数据进行验证,可以保证数据类型安全,避免了由于使用错误数据导致的程序崩溃、数据丢失等问题。本文将介绍 HapiJS Request 数据验证的知识,帮...

    1 年前
  • MongoDB 遇到写入冲突如何解决?

    在 MongoDB 中,当多个客户端同时尝试对同一个文档进行写入操作时,就会发生写入冲突。这时就需要一些技巧和策略来避免和处理这种情况。在本文中,我们将介绍如何面对 MongoDB 中的写入冲突,并提...

    1 年前
  • 利用 SASS 实现响应式设计的基本原理

    响应式设计是现代网站开发中必不可少的一个概念,它可以使网站在不同的设备上展现出最佳的用户体验。而 SASS 是一种 CSS 预处理器,它可以更好地组织和维护 CSS 代码,同时也能够提供一些强大的特性...

    1 年前
  • 如何在 Webpack 中使用 React 模板

    React 是一款流行的 JavaScript 库,用于构建单页应用程序和复杂的用户界面。Webpack 是一款强大的模块打包工具,可以把多个模块打包成一个或多个文件,实现优化和代码分离。

    1 年前
  • 如何使用 Angular CLI 创建项目

    什么是Angular CLI Angular CLI是一个让你更加快速创建和开发Angular应用的命令行工具。它几乎涵盖了Angular应用从开发到测试,打包部署等的全过程,并且已成为Angular...

    1 年前
  • ECMAScript 2017 中的 Object.getOwnPropertyDescriptors() 方法的深入解读

    Object.getOwnPropertyDescriptors() 是 ECMAScript 2017 中新添加的一个方法。它可以将某个对象的所有自有属性的描述符全部返回,包括 configurab...

    1 年前
  • CSS Grid 布局中的各种单位:fr、auto-fit、repeat

    一直以来,前端开发人员都希望在网页布局方面拥有更多的自由和创造力,而CSS Grid就是这个问题的一个完美解决方案。CSS Grid布局用于创建基于网格的布局,而这种布局通常是在一个行和列的网格系统中...

    1 年前
  • 提高 Node.js 应用性能的技巧和工具

    Node.js 是一个快速的、轻量级的 JavaScript 运行环境,由于其高效性和灵活性,在前端开发中得到了广泛的应用。虽然 Node.js 有许多优点,但在开发大型应用时,应用性能可能会受到影响...

    1 年前

相关推荐

    暂无文章