在现代 Web 应用程序中,用户身份验证和授权是必不可少的。JSON Web Token(JWT)是一种广泛使用的身份验证和授权机制,它使用 JSON 对象作为安全令牌。Express.js 是一个流行的 Node.js Web 框架,它提供了一个简单的方式来创建 Web 应用程序。在本文中,我们将学习如何使用 Express.js 实现基于 JSON Web Token 的用户认证和授权。
JSON Web Token 简介
JSON Web Token(JWT)是一种安全令牌,它由三个部分组成:头部,负载和签名。头部包含令牌的类型和所使用的签名算法。负载包含有关用户的信息,例如用户名和角色。签名用于验证令牌的完整性和身份验证。JWT 通常用于在客户端和服务器之间传递身份验证信息。
JWT 的工作流程如下:
- 用户提供用户名和密码进行身份验证。
- 服务器验证用户的凭据。
- 服务器生成 JWT 并将其发送回客户端。
- 客户端存储 JWT。
- 客户端向服务器发送请求,并在请求头中包含 JWT。
- 服务器验证 JWT 并执行所请求的操作。
Express.js 实现用户认证和授权
现在,让我们看看如何在 Express.js 中实现基于 JSON Web Token 的用户认证和授权。
安装依赖
首先,我们需要安装以下依赖:
npm install express jsonwebtoken body-parser dotenv
其中:
- express 是 Node.js 的 Web 框架。
- jsonwebtoken 是用于生成和验证 JWT 的库。
- body-parser 是用于解析请求体的库。
- dotenv 是用于从 .env 文件中加载环境变量的库。
配置环境变量
接下来,我们需要创建一个 .env 文件,并在其中添加以下环境变量:
JWT_SECRET=your_jwt_secret
其中,your_jwt_secret 是用于签署 JWT 的密钥。
创建用户模型
接下来,我们需要创建一个用户模型,用于存储用户的信息。在本例中,我们将使用 MongoDB 作为数据库。
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ---------- - --- ----------------- ----- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ---- -- --------- - ----- ------- --------- ---- -- ----- - ----- ------- ----- -------- --------- -------- ------ - --- -------------- - ---------------------- ------------
创建用户注册和登录路由
接下来,我们需要创建用户注册和登录路由。在注册路由中,我们将创建一个新用户,并将其保存到数据库中。在登录路由中,我们将验证用户的凭据,并生成 JWT。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------ - ------------------ ----- --- - ------------------------ ----- ---- - ------------------------ ----- ------ - ----------------- ------------------------ ----- ----- ---- -- - --- - ----- - ----- ------ -------- - - --------- ----- ---- - --- ------ ----- ------ --------- ----- --------------------- --- --- ----- ------------ --------------- - ----- ------- - ---------------------- ------ ------------- --- - --- --------------------- ----- ----- ---- -- - --- - ----- - ------ -------- - - --------- ----- ---- - ----- -------------- ----- --- -- ------- - ------ ---------------------- ------ -------- ------------ --- - -- -------- ------------------------ ---------------- - ------ ---------------------- ------ -------- ------------ --- - ----- ----- - ---------- --- --------- ----- --------- -- ------------------------ ---------- ----- --- - ----- ------- - ---------------------- ------ ------------- --- - --- -------------- - -------
创建受保护的路由
最后,我们需要创建一个受保护的路由,该路由需要 JWT 才能访问。在本例中,我们将使用 Express.js 中的中间件来验证 JWT。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ------------------------ ----- ------ - ----------------- --------------- ------------------ ----- ---- -- - ---------- -------- ------- ------- --- --- -------- ---------------------- ---- ----- - ----- ---------- - ----------------------------- ----- ----- - ---------- -- ------------------ ------ -- -------- - ------ ---------------------- ------ -------------- --- - ----------------- ----------------------- ------- ----- -- - -- ------- - ------ ---------------------- ------ -------------- --- - -------- - ----- ------- --- - -------------- - -------
启动应用程序
现在,我们已经完成了所有必要的设置。使用以下命令启动应用程序:
node index.js
示例代码
完整的示例代码如下:
-- -------------------- ---- ------- -- -------- ----- ------- - ------------------- ----- -------- - -------------------- ----- ---------- - ----------------------- ----- ------ - ------------------ ----- ---------- - ------------------------- ----- --------------- - ------------------------------ ---------------- ----- --- - ---------- ----------------------------------------- - ---------------- ----- ------------------- ---- --- --------------------------- ---------------- ------------ --------------------- ----------------- ---------------------------- -- -- - ------------------- --------- -- ---- ---------------------- ---
-- -------------------- ---- ------- -- -------------- ----- ------- - ------------------- ----- ------ - ------------------ ----- --- - ------------------------ ----- ---- - ------------------------ ----- ------ - ----------------- ------------------------ ----- ----- ---- -- - --- - ----- - ----- ------ -------- - - --------- ----- ---- - --- ------ ----- ------ --------- ----- --------------------- --- --- ----- ------------ --------------- - ----- ------- - ---------------------- ------ ------------- --- - --- --------------------- ----- ----- ---- -- - --- - ----- - ------ -------- - - --------- ----- ---- - ----- -------------- ----- --- -- ------- - ------ ---------------------- ------ -------- ------------ --- - -- -------- ------------------------ ---------------- - ------ ---------------------- ------ -------- ------------ --- - ----- ----- - ---------- --- --------- ----- --------- -- ------------------------ ---------- ----- --- - ----- ------- - ---------------------- ------ ------------- --- - --- -------------- - -------
-- -------------------- ---- ------- -- ------------------- ----- ------- - ------------------- ----- --- - ------------------------ ----- ------ - ----------------- --------------- ------------------ ----- ---- -- - ---------- -------- ------- ------- --- --- -------- ---------------------- ---- ----- - ----- ---------- - ----------------------------- ----- ----- - ---------- -- ------------------ ------ -- -------- - ------ ---------------------- ------ -------------- --- - ----------------- ----------------------- ------- ----- -- - -- ------- - ------ ---------------------- ------ -------------- --- - -------- - ----- ------- --- - -------------- - -------
-- -------------------- ---- ------- -- ------------- ----- -------- - -------------------- ----- ---------- - --- ----------------- ----- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ---- -- --------- - ----- ------- --------- ---- -- ----- - ----- ------- ----- -------- --------- -------- ------ - --- -------------- - ---------------------- ------------
结论
在本文中,我们学习了如何使用 Express.js 实现基于 JSON Web Token 的用户认证和授权。我们创建了一个用户模型,用户注册和登录路由以及受保护的路由。我们还学习了如何使用中间件来验证 JWT。这将有助于您构建更安全和可靠的 Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/675a5a6cca2d33f5483fa56e