什么是 Passport.js 以及为什么需要它?
\n\nPassport.js 是 Node.js 应用程序中最流行且最灵活的身份验证库。它被设计为 Express.js 的“中间件”模式,可以轻松集成到任何 Web 服务器中。Passport.js 的主要任务是简化用户身份验证过程,为使用数十种不同的身份验证策略提供统一的接口。
\n\n为什么需要这个库?在现代 Web 开发中,身份验证不仅仅是检查用户名和密码。用户期望能够通过社交网络(Google、Facebook、VK)、企业系统(LDAP、SAML)、JWT 令牌或一次性代码登录。每种方法都需要自己的逻辑、API 请求和错误处理。Passport.js 抽象了这种复杂性,提供了一种统一的模式:您选择一个“策略”(Strategy),进行配置,然后该库负责处理请求、会话和重定向的所有常规工作。
\n\nPassport.js 的主要优点:
\n- \n
- 模块化:超过 500 种策略,涵盖几乎所有现有的身份验证方法。 \n
- 易于集成:作为 Express.js 中间件工作,使代码清晰且可预测。 \n
- 独立于数据库:该库不强制规定用户存储方式——您自行决定如何以及在哪里存储数据(MongoDB、PostgreSQL、文件)。 \n
- 安全性:内置会话支持、CSRF 保护(通过附加模块)以及正确的密码处理。 \n
- 灵活性:您可以组合策略、创建自定义策略,并根据任何业务需求调整行为。 \n
本文将作为您的全面指南。我们将从安装开始,讲解快速入门,详细研究所有主要方法和函数,然后通过一个实际示例巩固知识。
\n\n安装库
\n\nPassport.js 及其必要策略的安装通过 npm 包管理器完成。基本安装包括库的核心和一种策略(最常见的是用于用户名/密码身份验证的 passport-local)。
# 安装 Passport.js 核心\nnpm install passport\n\n# 安装本地身份验证策略(用户名/密码)\nnpm install passport-local\n\n# 安装 JWT(JSON Web Tokens)策略\nnpm install passport-jwt\n\n# 安装 OAuth 2.0 策略(Google、Facebook 等)\nnpm install passport-google-oauth20\n\n# 附加:用于会话管理(如果不使用 JWT)\nnpm install express-session\n\n# 用于密码哈希(推荐)\nnpm install bcryptjs\n\n请注意:passport 只是核心。具体的身份验证方法(通过 Google、Facebook、本地等)通过单独的策略包实现。总共有数百种,您可以在官方网站 passportjs.org/packages/ 上找到所需的策略。
快速入门及代码示例
\n\n让我们创建一个带有本地身份验证(用户名和密码)的最小 Express.js 应用程序。此示例将展示 Passport.js 的基本架构。
\n\n步骤 1:创建 app.js 文件并安装依赖项。
const express = require('express');\nconst passport = require('passport');\nconst LocalStrategy = require('passport-local').Strategy;\nconst session = require('express-session');\nconst bcrypt = require('bcryptjs');\n\nconst app = express();\n\n// 配置用于解析请求体的中间件\napp.use(express.urlencoded({ extended: false }));\napp.use(express.json());\n\n// 配置会话(对于带有会话的 passport 是必需的)\napp.use(session({