身份验证是任何应用程序中的重要部分,特别是在 Web 应用程序中。在 Web 应用程序中,身份验证是确保用户是谁他们声称自己是的过程。在本文中,我们将使用 Express.js 和 JWT(JSON Web Tokens)来实现身份验证。
什么是 Express.js?
Express.js 是一个基于 Node.js 平台的 Web 应用程序框架。它提供了一组强大的功能,使开发人员能够轻松地构建 Web 应用程序。它是一个灵活的框架,可以通过添加中间件来扩展其功能。
什么是 JWT?
JSON Web Tokens(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式来表示信息。它是一种安全的方式,用于在网络上传输信息,因为它可以通过数字签名进行验证和信任。
JWT 由三部分组成:标头、负载和签名。标头包含有关令牌的元数据,例如令牌的类型和算法。负载包含有关令牌的信息,例如用户 ID、过期时间和其他元数据。签名是一个数字签名,用于验证令牌是否被篡改。
实现身份验证
在本文中,我们将使用 Express.js 和 JWT 实现身份验证。我们将创建一个简单的 Web 应用程序,该应用程序允许用户注册、登录和查看其个人资料。
安装依赖
在开始之前,我们需要安装一些依赖项。我们将使用 Express.js、jsonwebtoken、bcrypt 和 body-parser。打开终端并运行以下命令:
npm install express jsonwebtoken bcrypt body-parser --save
创建服务器
我们将从创建一个简单的服务器开始。在项目根目录中创建一个名为 server.js 的文件,并添加以下代码:
const express = require('express'); const app = express(); const port = 3000; app.listen(port, () => { console.log(`Server running on port ${port}`); });
这将创建一个监听端口为 3000 的服务器。我们可以通过运行以下命令来启动服务器:
node server.js
注册用户
现在,我们将创建一个端点,该端点允许用户进行注册。我们将使用 bcrypt 来加密用户的密码,并将用户信息保存在数据库中。在 server.js 文件中添加以下代码:
-- -------------------- ---- ------- ----- ------ - ------------------ ----- ---------- - ----------------------- --------------------------- ----- ----- - --- --------------------- ----- ----- ---- -- - --- - ----- -------------- - ----- ------------------------------ ---- ----- ---- - - ----- -------------- --------- -------------- -- ----------------- ----------------------- - ----- - ----------------------- - ---
这将创建一个名为 /register 的端点,该端点将用户信息保存在数组中。我们使用 bcrypt 来加密密码,并使用 async/await 来等待哈希密码的完成。如果发生错误,我们将发送一个 500 错误响应。
登录用户
现在,我们将创建一个端点,该端点允许用户进行登录。在 server.js 文件中添加以下代码:
-- -------------------- ---- ------- ------------------ ----- ----- ---- -- - ----- ---- - ----------------- -- --------- --- --------------- -- ----- -- ----- - ------ ---------------------------- ---- ------- - --- - -- ------ --------------------------------- --------------- - -------------------- - ---- - ------------- ---------- - - ----- - ----------------------- - ---
这将创建一个名为 /login 的端点,该端点将检查用户是否存在,然后检查密码是否匹配。我们使用 bcrypt.compare 来比较密码,并返回一个成功或失败的响应。
生成 JWT
现在,我们将生成一个 JWT,该 JWT 包含用户 ID 和用户名。在 server.js 文件中添加以下代码:
-- -------------------- ---- ------- ----- --- - ------------------------ ------------------ ----- ----- ---- -- - ----- ---- - ----------------- -- --------- --- --------------- -- ----- -- ----- - ------ ---------------------------- ---- ------- - --- - -- ------ --------------------------------- --------------- - ----- ----------- - ---------- ----- --------- -- ---------- ---------- ------------ ----------- --- - ---- - ------------- ---------- - - ----- - ----------------------- - ---
这将创建一个名为 /login 的端点,该端点将生成一个 JWT 并将其发送回客户端。我们使用 jwt.sign 来生成 JWT,其中包含用户名和一个秘密密钥。我们将 JWT 发送回客户端,以便客户端可以在以后的请求中使用它进行身份验证。
验证 JWT
现在,我们将创建一个中间件,该中间件将验证 JWT 并确保用户已经登录。在 server.js 文件中添加以下代码:
-- -------------------- ---- ------- ----- ----------------- - ----- ---- ----- -- - ----- ---------- - ----------------------------- ----- ----- - ---------- -- ------------------ ------ -- ------ -- ----- - ------ -------------------- - ----------------- --------- ----- ----- -- - -- ----- - ------ -------------------- - -------- - ----- ------- --- -- ------------------- ------------------ ----- ---- -- - -------------------------- -- --------- --- ---------------- ---
这将创建一个名为 authenticateToken 的中间件,该中间件将检查 JWT 是否存在并是否有效。如果 JWT 不存在或无效,则中间件将发送 401 或 403 响应。如果 JWT 有效,则中间件将将用户添加到请求中,并将请求传递给下一个处理程序。
我们还创建了一个名为 /profile 的端点,该端点需要进行身份验证。如果 JWT 有效,则端点将返回用户的个人资料。
总结
在本文中,我们使用 Express.js 和 JWT 实现了身份验证。我们创建了一个简单的 Web 应用程序,该应用程序允许用户进行注册、登录和查看其个人资料。我们使用 bcrypt 来加密密码,并使用 JWT 来进行身份验证。这个应用程序可以作为一个很好的起点,用于构建更复杂的 Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65cd8bb4add4f0e0ff6c3b3e