在现代 Web 应用程序中,用户认证是一个必不可少的功能。它允许用户在访问应用程序的受保护资源之前进行身份验证。JSON Web Token(JWT)是一种在 Web 应用程序中实现身份验证和授权的流行标准。在本文中,我们将学习如何在 Express.js 中使用 JWT 实现用户认证。
什么是 JSON Web Token(JWT)?
JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在 Web 应用程序中定义安全、紧凑的方式传输信息。JWT 可以用于身份验证和授权。它由三部分组成:头部、载荷和签名。头部包含有关 JWT 的元数据,载荷包含有关用户的信息,签名用于验证 JWT 是否有效。
以下是 JWT 的结构示例:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
在 Express.js 中使用 JWT 实现用户认证
在 Express.js 中使用 JWT 实现用户认证需要以下步骤:
- 创建一个 Express.js 应用程序。
- 安装所需的依赖项。
- 创建一个用户模型。
- 创建一个路由器,用于处理用户认证。
- 创建一个身份验证中间件,用于验证 JWT。
- 在需要身份验证的路由上使用身份验证中间件。
步骤 1:创建一个 Express.js 应用程序
首先,我们需要创建一个 Express.js 应用程序。我们可以使用以下命令创建一个新的应用程序:
mkdir myapp cd myapp npm init -y npm install express --save
创建一个名为 index.js
的文件,并将以下代码添加到文件中:
const express = require('express'); const app = express(); app.listen(3000, () => { console.log('Server started on port 3000'); });
这将创建一个 Express.js 应用程序,并在端口 3000 上启动它。
步骤 2:安装所需的依赖项
接下来,我们需要安装所需的依赖项。我们需要安装以下依赖项:
jsonwebtoken
:用于生成和验证 JWT。bcrypt
:用于密码哈希。body-parser
:用于解析请求正文。
我们可以使用以下命令安装这些依赖项:
npm install jsonwebtoken bcrypt body-parser --save
步骤 3:创建一个用户模型
接下来,我们需要创建一个用户模型。我们可以使用以下代码创建一个名为 User.js
的文件:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------ - ------------------ ----- ---------- - --- ----------------- --------- - ----- ------- --------- ---- -- --------- - ----- ------- --------- ---- -- --- ---------------------- -------- ------ - ----- ---- - ----- -- ------------------------------ - ------ ------- - ------------------ ----- ----- -- - -- ----- - ------ ---------- - -------------------------- ----- ----- ----- -- - -- ----- - ------ ---------- - ------------- - ----- ------- --- --- --- ---------------------------------- - -------- ------------------- --------- - --------------------------------- -------------- ----- -------- -- - -- ----- - ------ -------------- - -------------- --------- --- -- -------------- - ---------------------- ------------
这将创建一个名为 User
的模型,并将其导出。
步骤 4:创建一个路由器,用于处理用户认证
接下来,我们需要创建一个路由器,用于处理用户认证。我们可以使用以下代码创建一个名为 authRouter.js
的文件:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ------------------------ ----- ---- - ------------------ ----- ------ - ----------------- ------------------------ ----- ---- -- - ----- - --------- -------- - - --------- ----- ---- - --- ------ --------- -------- --- --------------- -- - -- ----- - ------ ---------------------- -------- ------ ----------- --- ----- --- - ----- ----- - ---------- ------- -------- -- ----------------- ---------------------- ----- --- --- --- --------------------- ----- ---- -- - ----- - --------- -------- - - --------- -------------- -------- -- ----- ----- -- - -- ----- - ------ ---------------------- -------- ------ ------- ----- --- - -- ------- - ------ ---------------------- -------- -------- -------- -- --------- --- - ------------------------------ ----- -------- -- - -- ----- - ------ ---------------------- -------- ------ --------- ---------- --- - -- ---------- - ------ ---------------------- -------- -------- -------- -- --------- --- - ----- ----- - ---------- ------- -------- -- ----------------- ---------------------- ----- --- --- --- --- -------------- - -------
这将创建一个名为 authRouter
的路由器,并将其导出。
步骤 5:创建一个身份验证中间件,用于验证 JWT
接下来,我们需要创建一个身份验证中间件,用于验证 JWT。我们可以使用以下代码创建一个名为 authMiddleware.js
的文件:
-- -------------------- ---- ------- ----- --- - ------------------------ ----- -------------- - ----- ---- ----- -- - ----- ----- - -------------------------- -- -------- - ------ ---------------------- -------- -------------- --- - --- - ----- ------- - ----------------- ----------------- ---------- - --------------- ------- - ----- ----- - ------ ---------------------- -------- -------------- --- - -- -------------- - ---------------
这将创建一个名为 authMiddleware
的中间件,并将其导出。
步骤 6:在需要身份验证的路由上使用身份验证中间件
最后,我们需要在需要身份验证的路由上使用身份验证中间件。我们可以使用以下代码修改 index.js
文件:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- -------- - -------------------- ----- -------------- - ---------------------------- ----- ---------- - ------------------------ --------------------------------------------- - ---------------- ---- --- ----- --- - ---------- --------------------------- ---------------- ------------ --------------------- --------------- ----- ---- -- - ---------------------- -------- ---------- --------- --- --- ---------------- -- -- - ------------------- ------- -- ---- ------- ---
这将在 /protected
路由上使用 authMiddleware
中间件,以确保只有经过身份验证的用户才能访问该路由。
结论
在本文中,我们学习了如何在 Express.js 中使用 JWT 实现用户认证。我们创建了一个用户模型、一个路由器和一个身份验证中间件,并在需要身份验证的路由上使用了身份验证中间件。JWT 是一种流行的身份验证和授权标准,它可以在 Web 应用程序中安全地传输信息。使用 JWT 实现用户认证是一个重要的安全措施,它可以帮助保护您的应用程序免受未经授权的访问。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/675d85dbe1dcc5c0fa3dd8e9