在 web 应用程序的开发中,用户身份验证是一个必不可少的部分。Express.js 是一个广泛使用的 web 框架,而 Passport 是一个基于 Node.js 的身份验证框架。本文将介绍在 Express.js 中使用 Passport 进行本地身份验证的方法。
什么是 Passport?
Passport 是一个 Node.js 的身份验证框架,支持超过 300 种身份验证策略,包括常见的本地用户名/密码、OAuth、JWT 等。它提供了一个简单的 API 和易于扩展的架构,使得开发者可以快速地添加身份验证功能到 Node.js 应用中。
如何在 Express.js 中使用 Passport 进行本地身份验证?
本文将演示如何使用 Passport 进行本地身份验证。我们将使用 MongoDB 来保存用户信息,使用 Passport-local 策略进行用户名/密码验证。
步骤 1:创建项目并安装依赖
我们首先需要在本地创建一个 Express.js 项目,并安装必要的依赖。打开终端,进入项目目录,执行以下命令:
mkdir passport-local-example cd passport-local-example npm init -y npm install express body-parser cookie-parser express-session mongoose passport passport-local
步骤 2:设置数据库连接
我们使用 MongoDB 来保存用户信息,因此需要设置数据库连接。在项目根目录下创建一个 config
目录,在其中创建 database.js
文件,输入以下内容:
module.exports = { url: "mongodb://localhost:27017/passport_local_example" };
这里设置了一个本地 MongoDB 数据库的连接 URL。你可以根据自己的需要进行修改。
步骤 3:创建用户模型
我们使用 Mongoose 来创建用户模型。在项目根目录下创建一个 models
目录,在其中创建 user.js
文件,输入以下内容:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ---------- - --- ----------------- ----- ------- ------ ------- --------- ------ --- -------------- - ---------------------- ------------
这里定义了一个名为 User
的模型,包含了 name
、email
、password
三个字段,分别用于保存用户的姓名、邮箱和密码。这些字段可以根据自己的需求进行修改。
步骤 4:配置 Passport
我们需要在 Express.js 应用中配置 Passport。在项目根目录下创建一个 config
目录,在其中创建 passport.js
文件,输入以下内容:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------------- - ----------------------------------- ----- ---- - -------------------------- ---------------- --------------- -------------- ------- -- ------- --------- ----- -- - -------------- ----- -- ---------- -- - -- ------- ------ ---------- ------ - -------- ------- --- -- --------- --- -------------- ------ ---------- ------ - -------- ------- --- ------ ---------- ------ -- ---------- -- - ------ ---------- --- ---- ----------------------------- ----- -- - ---------- --------- --- ----------------------------- ----- -- - ----------------- ---------- -- - ---------- ------ -- ---------- -- - ---------- --- ---
这里我们使用 passport-local
策略来进行本地身份验证。LocalStrategy
构造函数的第一个参数指定了用于验证的字段名,默认为 username
,这里我们指定为 email
。在验证函数中,我们通过查询数据库来检查用户是否存在,并验证密码是否正确。如果一切正常,我们将用户对象作为验证结果传递给 done
方法。
serializeUser
方法用于将用户对象序列化为一个字符串,方便后续保存在 session 中。deserializeUser
方法用于从 session 中解析出一个用户对象。
步骤 5:配置 Express.js 应用
我们需要在 Express.js 应用中配置 Passport,并添加一些路由来处理身份验证相关的请求。在项目根目录下创建一个 app.js
文件,输入以下内容:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- ------------ - ------------------------- ----- ------- - --------------------------- ----- -------- - -------------------- ----- -------- - -------------------- ----- ---- - ------------------------- ----- -------- - ----------------------------- ----- -------------- - ----------------------------- ----- --- - ---------- ------------------------------- ------------------------------- --------- ----- ---- --------------------------- ------------------------ ----------------- ------- ------------------------- ------- ------ ------------------ ----- ---- ------------------------------- ---------------------------- --------------------- ----- ---- -- - ----- - ----- ------ -------- - - --------- -------------- ----- -- ---------- -- - -- ------ ------ ---------- -------- ------ -------- ------- --- ----- ------- - --- ------ ----- ------ -------- --- -------------- -------- -- - ---------- -------- ----- -------- ------ --- -- ---------- -- - ---------- -------- ------ -------- ------ --- --- -- ---------- -- - ---------- -------- ------ -------- ------ --- --- --- ------------------ ------------------------------- ----- ---- -- - ---------- -------- ----- -------- ------- ----- -------- --- --- ------------------- ----- ---- -- - -- ------------------------ ------ ---------- -------- ------ -------- ----- --- ---------- -------- ----- -------- ------ ----- -------- --- --- ----- ------ - ---------------- -- -- - -------------------- ------ --------- -- ---- --------------------------- ---
这里我们定义了三个路由:
/register
:用于注册新用户。我们通过查询数据库来检查用户是否已经存在,如果不存在,则创建新的用户,并将其保存到数据库中。/login
:用于登录系统。我们使用passport.authenticate("local")
方法来进行身份验证,如果验证通过,则将用户对象保存到 session 中,并返回登录成功的信息。/profile
:用于获取当前登录用户的信息。我们使用 Express.js 的req.isAuthenticated()
方法来判断当前用户是否已经登录。
步骤 6:测试应用
我们使用 Postman 来测试我们的应用。在 Postman 中创建以下三个请求:
- POST
http://localhost:3000/register
,请求体如下:
{ "name": "张三", "email": "zhangsan@example.com", "password": "123456" }
- POST
http://localhost:3000/login
,请求体如下:
{ "email": "zhangsan@example.com", "password": "123456" }
- GET
http://localhost:3000/profile
。
我们可以看到,第一个请求成功后,第二个请求返回登录成功的信息,第三个请求返回当前登录用户的信息。
总结
本文介绍了在 Express.js 中使用 Passport 进行本地身份验证的方法。我们使用 MongoDB 来保存用户信息,使用 Passport-local 策略进行用户名/密码验证。通过本文的演示,你应该已经掌握了在 Express.js 中配置 Passport 的方法,并可以使用 Passport 进行本地身份验证。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a3700148841e9894fc6509