身份验证是 Web 应用程序中最常见的功能之一。在 Express.js 中,我们可以使用 Passport.js 库来实现身份验证。Passport.js 是一个非常流行的 Node.js 库,它提供了一种简单的方式来实现身份验证和授权。在本文中,我们将介绍如何在 Express.js 中使用 Passport.js 进行身份验证。
安装 Passport.js
在开始之前,我们需要先安装 Passport.js。在命令行中运行以下命令:
npm install passport passport-local
Passport.js 依赖于 passport-local 模块,因此我们需要同时安装它们两个。
创建 Express.js 应用程序
在开始使用 Passport.js 进行身份验证之前,我们需要先创建一个 Express.js 应用程序。我们可以使用 Express 应用程序生成器来创建一个基本的 Express.js 应用程序。在命令行中运行以下命令:
express myapp
这将创建一个名为 myapp 的新项目。我们可以进入该目录并安装依赖项:
cd myapp npm install
现在,我们已经创建了一个基本的 Express.js 应用程序,并准备好开始使用 Passport.js 进行身份验证。
配置 Passport.js
在使用 Passport.js 进行身份验证之前,我们需要先配置它。我们需要在 app.js 文件中添加以下代码:
const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy; passport.use(new LocalStrategy( function(username, password, done) { // 在这里验证用户的用户名和密码 } ));
在这段代码中,我们首先引入了 Passport.js 和 passport-local 模块。然后,我们使用 LocalStrategy 对象创建了一个新的策略。LocalStrategy 对象是 Passport.js 中的一种策略,它用于验证本地用户名和密码。在 LocalStrategy 构造函数中,我们传递了一个回调函数,该函数将用于验证用户的用户名和密码。
现在,我们需要实现验证回调函数。在回调函数中,我们将使用数据库或其他存储介质来验证用户的用户名和密码。如果验证成功,我们将通过调用 done() 方法来指示 Passport.js 验证成功。如果验证失败,我们将通过调用 done() 方法来指示 Passport.js 验证失败。
实现身份验证路由
现在,我们已经配置了 Passport.js,我们可以开始实现身份验证路由。我们将使用 Express.js 中的路由来处理身份验证请求。在 app.js 文件中添加以下代码:
app.post('/login', passport.authenticate('local', { failureRedirect: '/login' }), function(req, res) { res.redirect('/'); });
在这段代码中,我们首先定义了一个 POST 路由,该路由用于处理身份验证请求。我们使用 passport.authenticate() 方法来验证用户的用户名和密码。如果验证失败,我们将重定向到 /login 路由。如果验证成功,我们将重定向到主页。
实现登录页面
现在,我们已经实现了身份验证路由,我们需要实现一个登录页面,以便用户可以输入他们的用户名和密码。我们将使用 EJS 模板引擎来实现登录页面。在 views 目录中创建一个名为 login.ejs 的文件,该文件包含以下代码:
-- -------------------- ---- ------- --------- ----- ------ ------ -------------------- ------- ------ -------------- -- -- --------- - -- ------ ------- ------ -- - -- ----- ------------- ---------------- ----- ------------------------ ------ ----------- ---------------- ------ ----- ------------------------ ------ --------------- ---------------- ------ ----- ------ ------------- ---------- ---- ------ ------- ------- -------
在这段代码中,我们首先定义了一个 HTML 表单,该表单用于输入用户名和密码。表单的 method 属性设置为 POST,action 属性设置为 /login。在表单中,我们使用 label 和 input 元素来创建用户名和密码输入框。在表单的最后,我们使用 input 元素来创建一个提交按钮。
实现主页
现在,我们已经实现了登录页面和身份验证路由,我们需要实现一个主页,以便用户可以在登录后访问。在 views 目录中创建一个名为 index.ejs 的文件,该文件包含以下代码:
-- -------------------- ---- ------- --------- ----- ------ ------ ------------------- ------- ------ ----------- --- ------------- ------- -- ------------------ ------- ------- -------
在这段代码中,我们首先定义了一个欢迎消息,该消息显示当前用户的用户名。我们还创建了一个链接,该链接用于注销当前用户。
实现注销路由
现在,我们已经实现了主页和注销链接,我们需要实现一个注销路由,以便用户可以注销当前会话。在 app.js 文件中添加以下代码:
app.get('/logout', function(req, res){ req.logout(); res.redirect('/login'); });
在这段代码中,我们定义了一个 GET 路由,该路由用于注销当前用户。在路由的回调函数中,我们使用 req.logout() 方法来注销当前用户。然后,我们重定向到 /login 路由。
实现会话持久化
现在,我们已经实现了身份验证、登录页面、主页和注销路由,我们需要实现会话持久化。会话持久化是指在用户关闭浏览器后,用户仍然可以继续访问应用程序。在 Express.js 中,我们可以使用 express-session 和 passport-session 模块来实现会话持久化。
在命令行中运行以下命令安装这两个模块:
npm install express-session passport-session
然后,在 app.js 文件中添加以下代码:
-- -------------------- ---- ------- ----- ------- - --------------------------- ----- --------------- - ---------------------------- ----------------- ------- --------- ------- ------ ------------------ ----- ---- ------------------------------- ----------------------------
在这段代码中,我们首先引入了 express-session 和 passport-session 模块。然后,我们使用 app.use() 方法将这两个模块添加到 Express.js 应用程序中。在 session() 方法中,我们传递了一个 secret 参数。这个参数用于加密会话数据。在 passport.initialize() 和 passport.session() 方法中,我们将 Passport.js 添加到 Express.js 应用程序中。
完整示例代码
以下是一个完整的 Express.js 应用程序,该应用程序使用 Passport.js 进行身份验证:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------- - -------------------- ----- ------------- - ----------------------------------- ----- ------- - --------------------------- ----- --------------- - ---------------------------- ----- --- - ---------- ------------- -------- ------- ---------------------------- --------- ---- ---- ----------------- ------- --------- ------- ------ ------------------ ----- ---- ------------------------------- ---------------------------- ---------------- -------------- ------------------ --------- ----- - -- -------------- - --- ------------------------------------- ----- - ---------- --------- --- ------------------------------------- ----- - -- ------- -- ------ --- ------------------ ------------------------------ - ---------------- -------- --- ------------- ---- - ------------------ --- ------------------ ------------- ----- ------------- ----------------------- --- ------------ ------------- ----- ------------------- - ----- -------- --- --- ----------------- ------------- ----- ------------------- - -------- ------------------ --- --- ---------------- ----------- ------------------- ------- -- ---- ------- ---
在这个示例中,我们使用了 EJS 模板引擎来实现视图。我们还使用了 express.urlencoded() 中间件来解析 POST 请求的正文。我们使用了 Passport.js 的 serializeUser() 和 deserializeUser() 方法来实现会话持久化。我们还使用了 req.flash() 方法来显示身份验证错误消息。
结论
在本文中,我们介绍了如何在 Express.js 中使用 Passport.js 进行身份验证。我们首先安装了 Passport.js 和 passport-local 模块。然后,我们创建了一个 Express.js 应用程序,并配置了 Passport.js。我们使用了 LocalStrategy 对象来验证本地用户名和密码。我们还实现了身份验证路由、登录页面、主页和注销路由。最后,我们实现了会话持久化,以便用户可以在关闭浏览器后继续访问应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67593fc836908a98ca6bdba8