Passport 是一个流行的身份验证中间件,可以轻松地集成到 Express.js 中。在本文中,我们将介绍如何使用 Passport 进行本地身份验证,以确保用户可以安全地登录和访问应用程序。
安装
在开始之前,您需要安装 Express.js 和 Passport。可以使用以下命令进行安装:
npm install express passport passport-local
配置
在 app.js 文件中,我们需要引入 Passport 和 Passport-local 模块,并配置它们:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------- - -------------------- ----- ------------- - ----------------------------------- ----- --- - ---------- ---------------------------- --------- ---- ---- ------------------------ ------------------------------- ---------------------------- ---------------- -------------- ------------------ --------- ----- - -------------- --------- -------- -- -------- ----- ----- - -- ----- - ------ ---------- - -- ------- - ------ ---------- ------- - -- ------------------------------- - ------ ---------- ------- - ------ ---------- ------ --- - --- ------------------------------------- ----- - ---------- --------- --- ------------------------------------- ----- - ----------------- ------------- ----- - --------- ------ --- ---
这里我们使用了 Passport-local 策略进行本地身份验证。在 LocalStrategy 的回调函数中,我们使用 User.findOne() 方法查询数据库中是否存在该用户,并验证密码是否正确。如果验证成功,我们将返回用户对象。
passport.serializeUser() 和 passport.deserializeUser() 方法分别用于在用户登录后将用户对象存储在会话中,并在每个请求中将其提取。
路由
现在我们需要定义登录和注销路由:
app.post('/login', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' }) ); app.get('/logout', function(req, res){ req.logout(); res.redirect('/login'); });
在登录路由中,我们使用 passport.authenticate() 方法进行身份验证。如果验证成功,用户将被重定向到主页。如果验证失败,用户将被重定向到登录页面。
在注销路由中,我们使用 req.logout() 方法注销用户,并将其重定向到登录页面。
访问控制
现在我们已经配置了本地身份验证,并定义了登录和注销路由,我们需要确保只有已经登录的用户才能访问某些页面。我们可以使用 req.isAuthenticated() 方法来检查用户是否已经登录。
-- -------------------- ---- ------- -------- -------------------- ---- ----- - -- ----------------------- - ------ ------- - ----------------------- - ------------------- ---------------- ------------- ----- --------------------- - ----- -------- --- ---
在上面的代码中,我们定义了一个名为 isAuthenticated 的中间件,它将检查用户是否已经登录。如果用户已经登录,中间件将调用 next() 方法,否则将重定向到登录页面。
在访问受保护的页面时,我们可以使用 isAuthenticated 中间件来确保只有已登录的用户才能访问。
结论
在本文中,我们介绍了如何在 Express.js 中使用 Passport 进行本地身份验证。我们配置了 Passport 和 Passport-local 模块,定义了登录和注销路由,并使用 isAuthenticated 中间件确保只有已登录的用户才能访问受保护的页面。通过使用这些技术,我们可以确保用户可以安全地登录和访问应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/677a4b7b5c5a933a3413aa9b