随着 Web 应用程序的发展,安全性往往成为一个重要的问题。特别是当您需要让用户在您的应用程序中创建和管理个人账户时,保护用户数据和信息的私密性就显得尤为重要。因此,身份验证系统被称为保障用户隐私与信息安全的核心部分。
在本文中,我们将讨论如何使用 Express.js 和 Passport.js 创建一个基本的身份验证系统。Express.js 是一种用于构建 Web 应用程序的流行 Node.js 框架,并且能够帮助我们轻松地创建 Web 服务器。而 Passport.js 是 Node.js 的一个可扩展身份验证模块,它提供了一系列身份验证策略,包括本地身份验证和第三方身份验证等。
步骤1:创建 Express.js 应用
首先,我们需要安装 Express.js 和其他所需的依赖包。我们可以使用以下命令安装这些依赖项:
npm install express body-parser cookie-parser express-session passport passport-local --save
一旦安装完成,我们就可以开始创建我们的 Express.js 应用程序了。在命令行中键入以下命令:
-- -------------------- ---- ------- ----- ------- - ------------------ ----- ---------- - ---------------------- ----- ------------ - ------------------------ ----- ------- - -------------------------- ----- -------- - ------------------- ----- ------------- - ---------------------------------- -- --- ---------- ---- ----- --- - --------- -- -- ----------- - ------------- ---------- ------ ------------------------------- --------- ----- --- ----------------------- -- -- --------------- -------- ------- ----------------- ------- --------- ----- ------- ------ ------------------ ---- --- -- --- -------- ----------- ------------------------------ --------------------------- ---------------- -------------- -------- ---------- --------- ----- - -- ----------- - -- -- ------ ------------ ----- ---- -- - -- ----------- -- ------------------ ------------------------------ - ---------------- -------- --- ----- ---- -- - -- --------------- -- ------------------ ----- ---- -- - ------------- ------------------ --- ---------------- -- -- - ---------------- --------- -- ---- ------- --
在上面的代码中,我们首先引入了所需的依赖项,并实例化了一个 Express.js 应用程序。然后我们添加了 body-parser 和 cookie-parser 中间件以处理请求和 cookie。接着,我们配置了 express-session 中间件,用于 session 管理,然后初始化了 Passport.js 程序并设置本地身份验证策略。此外,我们还构建了几个路由,并在其中实现了页面渲染和登录逻辑等。
步骤2:实现身份验证逻辑
接下来,我们需要在步骤1中初始化的本地身份验证策略中实现身份验证逻辑。在这个例子中,我们将仅使用一个简单的用户名和密码验证逻辑:
-- -------------------- ---- ------- ---------------- -------------- -------- ---------- --------- ----- - -- --------- --- ------- -- -------- --- ----------- - -- ---------- ------ ---------- - --- ---- --------- ------- -- -- ----------------- - ---- - ------ ---------- ------ - -------- ---------- -------- -- ---------- -- -- ------ - - --
在上述代码中,我们首先比较给定的用户名和密码是否与我们所期望的数据匹配,如果匹配,则返回用户的 ID 和用户名,然后 passport.authenticate() 函数会将用户信息添加到 session 中。否则,该函数将返回一个验证失败的信息。
步骤3:实现页面渲染逻辑
在步骤1的代码中,我们创建了几个路由,其中一个路由处理主页页面的渲染逻辑,如下:
app.get('/', (req, res) => { if (req.isAuthenticated()) { // 如果用户已经通过身份验证,呈现个性化页面 res.send(`<h2>Welcome, ${req.user.username}</h2>`) } else { // 如果用户没有通过身份验证,呈现登录页面 res.sendFile(__dirname + '/login.html') } })
在上述代码中,如果当前请求的用户已经通过身份验证,则渲染一个个性化页面,否则渲染一个登录页面。
步骤4:实现登录页面逻辑
最后,我们需要为用户提供一个登录页面以输入他们的凭据。我们可以简单地使用 HTML 表单显示登录页面,如下所示:
-- -------------------- ---- ------- ----- --------------- -------------- ----- ------------------------ ------ ----------- ----------------- ------ ----- ------------------------ ------ --------------- ----------------- ------ ----- ------ ------------- ---------- ----- ------ -------
在用户提交表单时,Express.js 将通过 passport.authenticate() 函数验证用户的凭据是否有效,如下所示:
app.post('/login', passport.authenticate('local', { failureRedirect: '/login' }), (req, res) => { res.redirect('/'); })
在用户成功通过身份验证后,该函数将重定向用户到主页页面。
结论
现在,我们已经创建了一个基本的身份验证系统,可以验证用户的身份并在身份验证成功时呈现个性化页面。当然,这只是一个基本的示例,可以添加更多的身份验证和授权策略,也可以使用 Passport.js 支持的身份验证策略来解决许多常见的身份验证需求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f23616a44b36ee5764a757