在 Web 应用程序中,身份验证是保护用户数据和敏感信息的重要组成部分。Express.js 是一个流行的 Node.js Web 框架,提供了许多身份验证的选项。本文将介绍如何在 Express.js 中实现基本身份验证,包括使用 Passport.js 和 JSON Web Token(JWT)。
什么是身份验证?
身份验证是确认用户身份的过程。在 Web 应用程序中,身份验证通常涉及用户提供用户名和密码。服务器验证这些凭据是否有效,并且如果有效,则允许用户访问受保护的资源。
使用 Passport.js 实现身份验证
Passport.js 是一个流行的 Node.js 身份验证中间件,可以轻松地与 Express.js 集成。它支持多种身份验证策略,包括本地策略(用户名和密码)、OAuth、OpenID 等。
安装 Passport.js
要使用 Passport.js,首先需要将其安装为项目的依赖项。打开终端并输入以下命令:
npm install passport passport-local
这将安装 Passport.js 和本地身份验证策略。
设置 Passport.js
在 Express.js 应用程序中设置 Passport.js 非常简单。只需在应用程序中引入 Passport.js 和本地策略,然后初始化 Passport.js。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------- - -------------------- ----- ------------- - ----------------------------------- ----- --- - ---------- -- --- ----------- ------------------------------- ---------------------------- -- ------ ---------------- -------------- ------------------ --------- ----- - -- -------- -- --------- --- ------- -- -------- --- ----------- - ------ ---------- - --------- ------- --- - ---- - ------ ---------- ------ - -------- ---------- --- - - --- -- ----- ------------------------------------- ----- - ---------- --------------- --- -- ------ ------------------------------------------- ----- - ---------- - --------- -------- --- ---
这将设置 Passport.js 并配置本地策略。在本地策略中,我们验证用户名和密码,如果它们有效,则返回用户对象。在序列化和反序列化用户函数中,我们将用户对象转换为和从字符串转换为对象。
使用 Passport.js 进行身份验证
现在,我们已经设置了 Passport.js,可以使用它来验证用户凭据。要验证用户,可以使用 passport.authenticate
中间件。
app.post('/login', passport.authenticate('local', { failureRedirect: '/login' }), function(req, res) { res.redirect('/'); });
此代码将使用本地策略验证用户凭据。如果验证失败,则用户将重定向到 /login
。如果验证成功,则用户将重定向到 /
。
使用 JSON Web Token 实现身份验证
JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在不同应用程序之间安全地传输信息。JWT 可以在客户端和服务器之间传递信息,并且可以用于实现身份验证。
安装 JWT
要使用 JWT,需要将其安装为项目的依赖项。打开终端并输入以下命令:
npm install jsonwebtoken
生成 JWT
要生成 JWT,可以使用 jsonwebtoken
模块。以下是生成 JWT 的示例代码:
const jwt = require('jsonwebtoken'); const payload = { username: 'admin' }; const secret = 'mysecret'; const token = jwt.sign(payload, secret); console.log(token);
此代码将生成一个包含 username
数据的 JWT,并使用 mysecret
密钥对其进行签名。要验证 JWT,需要使用相同的密钥。
验证 JWT
要验证 JWT,可以使用 jsonwebtoken
模块。以下是验证 JWT 的示例代码:
-- -------------------- ---- ------- ----- --- - ------------------------ ----- ----- - -------------------------------------------------------------------------------------------------------------------------------------- ----- ------ - ----------- ----------------- ------- ------------- -------- - -- ----- - ------------------- - ---- - --------------------- - ---
此代码将验证 JWT 并将其解码为 JavaScript 对象。如果验证失败,则将输出错误。如果验证成功,则将输出包含 username
数据的对象。
实现基本身份验证
要实现基本身份验证,可以结合使用 Passport.js 和 JWT。以下是实现基本身份验证的示例代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------- - -------------------- ----- ------------- - ----------------------------------- ----- --- - ------------------------ ----- --- - ---------- ----- ------ - ----------- -- ------ ---------------- -------------- ------------------ --------- ----- - -- -------- -- --------- --- ------- -- -------- --- ----------- - ------ ---------- - --------- ------- --- - ---- - ------ ---------- ------ - -------- ---------- --- - - --- -- -- --- -------- ------------------- - ----- ------- - - --------- ------------- -- ------ ----------------- -------- - -- -- --- -------- ---------------- ---- ----- - ----- ----- - -------------------------- -- -------- - ------ ---------------------- -------- -------- --- - ----------------- ------- ------------- -------- - -- ----- - ------ ---------------------- -------- -------- --- - ---- - -------- - -------- ------- - --- - -- -- ------------------ ------------------------------ - -------- ----- --- ------------- ---- - ----- ----- - ------------------------ ---------- ------ ----- --- --- -- ------ ------------ ------------ ------------- ---- - ---------- -------- ------ --- --- ---------------- ---------- - ----------------------- ---
此代码将使用本地策略验证用户凭据,并生成 JWT。要访问受保护的路由,必须在请求标头中包含 JWT。在 verifyToken
函数中,我们验证 JWT 并将其解码为 JavaScript 对象。如果验证失败,则返回未授权的访问错误。
结论
在本文中,我们介绍了如何在 Express.js 中实现基本身份验证。我们使用了 Passport.js 和 JSON Web Token(JWT)来实现身份验证,并提供了示例代码。通过使用这些技术,可以确保 Web 应用程序的安全性,并保护用户数据和敏感信息。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67430c3af3dd653032846703