在 Web 应用程序中,身份验证和授权是必要的功能。Passport 是一个流行的 Node.js 身份验证中间件,它允许我们使用不同的策略进行身份验证和授权。本文将介绍如何在 Express.js 中使用 Passport 实现身份验证和授权。
安装 Passport
在开始使用 Passport 之前,需要先安装它。可以通过 npm 进行安装:
npm install passport passport-local
其中,passport
是 Passport 的核心库,passport-local
是本地身份验证策略。
配置 Passport
在使用 Passport 之前,需要先配置它。在 Express.js 中,需要在应用程序的入口文件中配置 Passport。首先,需要引入 Passport 和相关策略:
const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy;
然后,需要配置 Passport。在配置中,需要设置序列化和反序列化用户对象的方法。序列化用户对象的方法会在用户登录成功后调用,用于将用户对象存储到 session 中。反序列化用户对象的方法会在用户访问需要授权的页面时调用,用于从 session 中获取用户对象。
-- -------------------- ---- ------- ------------------------------------- ----- - ---------- --------- --- ------------------------------------- ----- - ----------------- ------------- ----- - --------- ------ --- ---
接下来,需要配置本地身份验证策略。本地身份验证策略会验证用户的用户名和密码是否正确。
-- -------------------- ---- ------- ---------------- -------------- ------------------ --------- ----- - -------------- --------- -------- -- -------- ----- ----- - -- ----- - ------ ---------- - -- ------- - ------ ---------- ------- - -- -------------------------------- - ------ ---------- ------- - ------ ---------- ------ --- - ---
在上面的代码中,User
是一个 Mongoose 模型,用于操作用户对象。findOne()
方法会在数据库中查找用户名为 username
的用户对象。如果找到了用户对象,会调用 verifyPassword()
方法验证密码是否正确。如果密码正确,会将用户对象传递给 done
回调函数。
最后,需要将 Passport 配置到 Express.js 应用程序中:
app.use(passport.initialize()); app.use(passport.session());
创建登录和注册页面
在使用 Passport 实现身份验证和授权之前,需要先创建登录和注册页面。可以使用 HTML、CSS 和 JavaScript 创建这些页面。在登录页面中,用户需要输入用户名和密码。在注册页面中,用户需要输入用户名、密码和确认密码。
实现身份验证
在创建了登录页面之后,就可以使用 Passport 实现身份验证了。在 Express.js 中,可以使用 passport.authenticate()
方法进行身份验证。该方法会返回一个中间件,用于验证用户的身份。
app.post('/login', passport.authenticate('local', { failureRedirect: '/login' }), function(req, res) { res.redirect('/'); });
在上面的代码中,passport.authenticate()
方法会使用本地身份验证策略进行身份验证。如果身份验证失败,会重定向到登录页面。如果身份验证成功,会重定向到主页。
实现授权
在实现身份验证之后,就可以使用 Passport 实现授权了。在 Express.js 中,可以使用 req.isAuthenticated()
方法判断用户是否已登录。如果用户已登录,可以使用 req.user
属性获取用户对象。
app.get('/profile', function(req, res) { if (req.isAuthenticated()) { res.render('profile', { user: req.user }); } else { res.redirect('/login'); } });
在上面的代码中,/profile
路由需要授权才能访问。如果用户已登录,会渲染 profile
模板并传递用户对象给模板。如果用户未登录,会重定向到登录页面。
示例代码
下面是一个完整的示例代码,用于演示如何在 Express.js 中使用 Passport 实现身份验证和授权。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------- - -------------------- ----- ------------- - ----------------------------------- ----- ------- - --------------------------- ----- -------- - -------------------- --------------------------------------------------------- ----- ---- - ---------------------- - --------- ------- --------- ------ --- ----- --- - ---------- ------------- -------- ------- ---------------------------- --------- ----- ---- ----------------- ------- --------- ------- ------ ------------------ ----- ---- ------------------------------- ---------------------------- ------------------------------------- ----- - ---------- --------- --- ------------------------------------- ----- - ----------------- ------------- ----- - --------- ------ --- --- ---------------- -------------- ------------------ --------- ----- - -------------- --------- -------- -- -------- ----- ----- - -- ----- - ------ ---------- - -- ------- - ------ ---------- ------- - -- -------------------------------- - ------ ---------- ------- - ------ ---------- ------ --- - --- ------------ ------------- ---- - -------------------- --- ----------------- ------------- ---- - -------------------- --- ------------------ ------------------------------ - ---------------- -------- --- ------------- ---- - ------------------ --- -------------------- ------------- ---- - ----------------------- --- --------------------- ------------- ---- - ----- ---- - --- ------ --------- ------------------ --------- ----------------- --- ----------------------- - -- ----- - -------------------------- - ---- - ----------------------- - --- --- ------------------ ------------- ---- - ------------- ------------------ --- ------------------- ------------- ---- - -- ----------------------- - --------------------- - ----- -------- --- - ---- - ----------------------- - --- ---------------- ---------- - ---------------- --------- -- ---- -------- ---
结论
Passport 是一个非常强大的身份验证中间件,它可以使用多种策略进行身份验证和授权。在 Express.js 中,可以很容易地使用 Passport 实现身份验证和授权。本文介绍了如何在 Express.js 中使用 Passport 实现身份验证和授权,并提供了示例代码。希望这篇文章对你有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67428102db344dd98ddad39e