使用 Passport.js 和 Express.js 实现社交登录

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

在现代网络应用中,社交登录是一种流行的身份验证方式。它允许用户直接使用他们在社交媒体平台上的身份来登录你的应用,而不需要记忆另一组用户名和密码。使用社交登录可以加速用户注册流程,降低用户的沉没成本,提高用户的参与度和忠诚度。本文将介绍如何使用 Passport.js 和 Express.js 实现社交登录。

简介

Passport.js 是一个流行的 Node.js 身份验证中间件。它支持超过 500 种身份验证策略,包括本地策略、OAuth、OpenID、SAML 等。Passport.js 可以极大简化身份验证流程的实现和维护,提高安全性和稳定性。

Express.js 是一个流行的 Node.js Web 框架。它提供了简单易用的路由、模板、中间件等功能,可以快速创建 Web 应用和 API。

在本文中,我们将使用 Passport.js 和 Express.js 实现社交登录的示例为 GitHub 提供的 OAuth2 策略。

前置条件

在实现社交登录之前,我们需要满足以下前置条件:

  • 一个有效的 GitHub 帐户和一个应用程序的 OAuth2 凭据。你可以在 GitHub Developer Settings 页面注册并创建一个 OAuth App。
  • 一个 Node.js 环境和一个包管理器。你可以在 Node.js 官网 下载和安装。
  • 一个基本的 Express 应用程序。你可以在 Express.js 中文网 学习并创建。

创建 Passport.js 应用

我们需要首先在我们的应用程序中添加 Passport.js 依赖项:

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

然后,我们需要在 Express 应用程序中添加 Passport.js 和相关中间件:

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

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

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

上述代码中,我们使用 GitHubStrategy 作为我们的身份验证策略,并传递我们在 GitHub Developer Settings 创建的 OAuth2 凭据。Passport.js 将处理 OAuth2 认证流程,并将用户信息传递到回调函数中。我们需要在回调函数中验证 GitHub 用户,并将用户信息存储到数据库中或创建一个新用户。然后,我们必须调用 done(err, user) 回调函数,以便 Passport.js 可以将用户信息保存到 session 中供以后使用。

创建登录和注销路由

接下来,我们需要在 Express 应用程序中添加登录和注销路由:

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

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

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

在上面的代码中,我们使用 passport.authenticate('github', { scope: [ 'user:email' ] }) 处理我们的登录路由,并将用户重定向到 GitHub 登录页面。GitHub 将请求用户授权我们的应用程序,并重定向回我们的应用程序的 /auth/github/callback 路由。在 /auth/github/callback 路由中,我们使用 passport.authenticate('github') 处理用户信息,如果成功则将用户重定向回我们的应用程序主页。在注销路由中,我们通过 req.logout() 方法清除用户的 Passport.js session,并将用户重定向回主页。

添加身份验证保护

最后,我们需要在我们的应用程序中保护需要身份验证的路由:

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

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

在上面的代码中,我们使用 authenticationMiddleware() 中间件保护我们的 /profile 路由。中间件将检查用户是否通过 Passport.js 验证,如果是则继续执行路由处理器,否则将用户重定向到登录页面。

完整示例代码

以下是一个使用 Passport.js 和 Express.js 实现 GitHub 社交登录的完整示例代码:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

总结

本文介绍了如何使用 Passport.js 和 Express.js 实现社交登录。我们首先创建了我们的 Passport.js 应用程序,并添加了必要的中间件以处理身份验证流程。然后,我们创建了登录和注销路由,并添加了身份验证保护。最后,我们提供了一个完整的示例代码,演示了如何使用 GitHub OAuth2 策略实现社交登录。

使用 Passport.js 和 Express.js 可以轻松实现多种身份验证策略,大大简化了身份验证流程的实现和维护。使用社交登录可以为你的应用程序提供更好的用户体验和更高的用户参与度和忠诚度。希望本文对你有所帮助,并可以启发和指导你在实际开发中使用 Passport.js 和 Express.js 实现社交登录。

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


猜你喜欢

  • Koa 应用程序中的依赖注入技术

    在编写 Koa 应用程序时,依赖注入是一个非常有用的技术。如果你不熟悉依赖注入,那么可能会感到有些困惑。本文将详细讨论 Koa 应用程序中的依赖注入技术,并为你提供示例代码和指导意义。

    1 年前
  • Flexbox 布局中如何实现两列等高布局

    在前端开发中,有时候需要实现两列等高布局,这种布局能够让页面看起来更加美观和整洁。而在 Flexbox 布局中,实现两列等高布局并不困难。本文将详细介绍在 Flexbox 布局中如何实现两列等高布局,...

    1 年前
  • Mocha 测试框架中的测试覆盖率统计工具 ——istanbul 详解!

    在前端领域中,测试是非常重要的一环,而测试工具更是不可或缺的。Mocha 是一个流行的 JavaScript 测试框架,旨在为开发者提供简单、灵活的测试工具。但是,在编写测试用例之后,如何衡量我们的测...

    1 年前
  • Vue.js 中使用 render 函数进行自定义指令的详细使用方法

    在 Vue.js 中,自定义指令是一种非常强大的功能,使用自定义指令可以让我们更好地组织和管理 Vue.js 的模板。在 Vue.js 中,自定义指令是通过一个对象来定义的,这个对象包含了一些生命周期...

    1 年前
  • TypeScript 如何解决错误类型推断?

    TypeScript 是一种由微软开发的开源编程语言,它是 JavaScript 的一个超集,并为 JavaScript 添加了强类型支持。TypeScript 可以通过类型推断来静态分析代码,从而检...

    1 年前
  • Headless CMS 与多终端适配的解决方案和最佳实践

    随着互联网技术的发展,用户需求也越来越多元化,许多企业需要在不同的设备和终端上提供服务。而这些服务需要具备高度的响应速度、卓越的用户体验和灵活的内容管理。在这个背景下,Headless CMS 和多终...

    1 年前
  • 使用 Chai 和 Mocha 测试 Node.js 中的 WebSocket 代码

    使用 Chai 和 Mocha 测试 Node.js 中的 WebSocket 代码 在 Node.js 中,WebSocket 是一种非常常用的网络通信协议,可以在 Web 应用程序中实现实时的双向...

    1 年前
  • 如何使用 MongoDB 中的 GridFS 来管理文件

    什么是 GridFS? GridFS 是 MongoDB 中用于存储和检索大文件的一种机制,它将大文件分成多个 chunks(块)存储在 MongoDB 中的多个 document 中,利用 Mong...

    1 年前
  • PM2+Node.js 如何快速处理数据量巨大的操作?

    随着互联网应用的不断发展和数据量的不断增加,前端开发中经常需要处理数据量巨大的操作。如何快速处理这些大量数据,既保证性能,又不影响用户体验,是前端开发的一大难点。本文将介绍如何使用 PM2+Node....

    1 年前
  • SASS 代码中 @media 的使用方法

    SASS 代码中 @media 的使用方法 在前端网页开发中,响应式设计已经成为了越来越重要的一个概念。随着越来越多的用户使用移动设备进行网页浏览,开发者们需要准确地为各种不同的屏幕尺寸编写网页,以便...

    1 年前
  • ECMAScript 2017 中的 Array.prototype.includes() 方法的实现

    前言 在 JavaScript 的开发中,数组是使用最多的数据类型之一。在 ECMAScript 2015 中,新增了一些非常实用的 Array 方法,比如:find、findIndex、map、re...

    1 年前
  • 如何在 webpack 打包时快速定位到模块错误

    当在前端项目中使用 webpack 进行打包时,可能会遭遇模块错误的情况。这些错误可能会导致整个应用程序无法正常工作,因此快速定位到这些错误非常重要,以帮助我们更快地修复和解决问题。

    1 年前
  • PWA 应用如何使用 Location API 进行定位

    什么是 PWA 应用 PWA(Progressive Web App)是一种结合了 Web 和 Native 应用特点的 Web 应用。它通过 ServiceWorker 和 App Shell 提供...

    1 年前
  • Django REST framework 中实现自定义过滤器

    Django REST framework 中实现自定义过滤器 Django REST framework 是一个用于构建现代 Web API 的强大框架。通过它,我们可以轻松地构建出安全、高度可扩展...

    1 年前
  • Jest 源码分析:深入了解测试框架的本质

    Jest 源码分析:深入了解测试框架的本质 Jest 是一个流行的 JavaScript 测试框架,在前端开发中得到广泛应用。它是 Facebook 出品的,具有易用、快速和全面的功能特点。

    1 年前
  • 如何使用 Material Design 制作标签布局

    Material Design 是一种由 Google 推广的设计语言,它提供了许多设计原则和 UI 组件,让开发人员轻松地创建具有现代感的 Web 应用。在本文中,我们将使用 Material De...

    1 年前
  • 使用 ES7 中的 Object.getOwnPropertyNames 方法实现对象属性遍历

    JavaScript 中的对象是一种非常常见的数据类型,我们经常需要对对象进行属性遍历以获取或修改其属性值。ES6 中引入了新的遍历方法,如 for-in 循环,Object.keys 等,但在某些情...

    1 年前
  • Serverless 应用如何做好函数间调用?

    随着 Serverless 架构的兴起,越来越多的应用选择将应用转化为无服务器架构。Serverless 的主要优点是可以减少开发人员的负担,简化了部署过程,并提高了可伸缩性。

    1 年前
  • ECMAScript 2020:使用 Class 和 Static Data 获取和保留数据

    在前端开发中,我们经常需要获取和保留数据。而在 ECMAScript 2020 中,Class 和 Static Data 的引入让这些操作变得更加简单。 Class 类 Class 是 ECMASc...

    1 年前
  • Redux 状态设计

    Redux 是一个流行的 JavaScript 状态管理库,它可以使得我们更加方便地管理应用程序的复杂状态。在 Redux 中,状态的改变是通过 dispatch 函数向 reducer 发送 act...

    1 年前

相关推荐

    暂无文章