在现代 Web 应用程序中,用户认证和授权是基本需求。Express.js 是一个流行的 Web 框架,提供了许多工具和库来简化构建 Web 应用程序的过程。Passport 是一个流行的认证和授权库,可以帮助我们轻松地管理用户的认证和授权过程。
在本文中,我们将了解如何在 Express.js 中使用 Passport 来管理用户的认证和授权。我们将了解 Passport 的基础知识以及如何在 Express.js 中安装和配置 Passport。我们还将深入了解 Passport 的策略和如何实现的自定义策略。最后,我们将演示如何在 Express.js 应用程序中使用 Passport 来保护需要授权访问的路由。
安装和配置 Passport
要在 Express.js 中使用 Passport,我们需要安装两个库:passport
和 passport-local
。passport
是 Passport 的核心库,passport-local
是一个策略,用于认证本地用户。
npm install passport passport-local
安装完成后,我们需要在 Express.js 中配置 Passport。我们将创建一个名为 passport-config.js
的文件,在其中配置 Passport。
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------------- - ----------------------------------- ---------------- -------------- ------------------ --------- ----- - -- --------------- -- --------- --- ------- -- -------- --- ----------- - ------ ---------- ---------- ---------- - ------ ---------- ------ --------- -------- -------- -- ------------ - --- ------------------------------------- ----- - ---------- --------------- --- ------------------------------------------- ----- - ---------- ---------- ----------- ---
在上面的代码中,我们首先引入了 passport
和 passport-local
库。然后,我们定义了一个本地策略,该策略将检查用户名和密码是否匹配。如果用户名和密码匹配,我们将调用 done
函数并返回 user
对象。如果不匹配,我们将调用 done
函数并返回 false
,并带有一条错误消息。最后,我们定义了两个函数 serializeUser
和 deserializeUser
,用于序列化和反序列化用户对象。
实现自定义策略
如果默认的本地策略不符合我们的需求,我们可以实现自定义策略。我们可以通过继承 passport.Strategy
类并实现 authenticate
方法来实现自定义策略。
-- -------------------- ---- ------- ----- -------- - -------------------- ----- -------- - ----------------------------- ----- -------------- ------- -------- - -------------------- ------- - -------------- -------- --------- - --------- - ----------------- -------- - -- ------------ ----- ----- - -------------------------- -- ------ --- --------------- - ------ ----------------------- ---------- - ------ ------------------ -------- - - ---------------- ------------------
在上面的代码中,我们定义了一个名为 CustomStrategy
的自定义策略。这个策略检查发出请求的用户是否具有有效的 Authorization
头,如果有,就调用 this.success
方法并返回 user
对象。否则,它将调用 this.fail
方法并返回错误消息。最后,我们通过调用 passport.use
方法将自定义策略添加到 Passport 中。
使用 Passport 保护路由
现在我们已经配置了 Passport,我们可以使用它来保护需要授权访问的路由。我们可以通过在路由处理程序之前添加 passport.authenticate
中间件来保护路由。
const express = require('express'); const passport = require('passport'); const app = express(); app.get('/protected', passport.authenticate('local'), function(req, res) { res.send('You are authorized to access this route'); });
在上面的代码中,我们定义了一个 GET 路由处理程序,该处理程序需要授权才能访问。我们使用 passport.authenticate
中间件来保护路由。当用户请求 /protected
路由时,Passport 将使用 local
策略进行认证。如果认证成功,路由处理程序将被调用,否则用户将被重定向到登录页。
结论
在本文中,我们了解了如何在 Express.js 中使用 Passport 进行认证和授权。我们安装和配置了 Passport,并学习了如何实现自定义策略。最后,我们演示了如何在 Express.js 应用程序中使用 Passport 保护需要授权访问的路由。使用 Passport,我们可以轻松地管理用户的认证和授权过程,使我们的应用程序更加安全和可靠。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6732b4550bc820c5823e6982