在实现 Web 应用程序时,用户身份验证是一个至关重要的问题。使用 JWT(JSON Web Token)是一种流行的方式,因为它提供了一种方便的方法来管理用户的身份验证状态。在本文中,我们将学习如何使用 Express.js 和 JWT 实现用户身份验证。
JWT 简介
JWT 是一种开放标准(RFC 7519),用于在不同应用程序(或服务)之间安全地传输信息,可以用于身份验证和授权。JWT 由三部分组成:
- Header - 包含令牌的类型和算法
- Payload - 包含令牌的信息(称为声明)
- Signature - 用于验证令牌是否被篡改
JWT 是无状态的,这意味着服务器不需要存储会话信息。用户一旦进行身份验证并获得 JWT,就可以使用该令牌来访问受保护的资源。
Express.js 和 JWT
Express.js 是一个流行的 Node.js Web 框架。我们可以使用它来创建 Web 应用程序和 REST API。在使用 JWT 进行用户身份验证时,我们需要一些额外的步骤来确保客户端具有有效的令牌。
1. 安装依赖项
我们需要安装一些依赖项。打开终端并输入以下命令:
npm install express jsonwebtoken bcrypt cors body-parser --save
express
是我们的 Web 框架jsonwebtoken
用于创建和验证 JWTbcrypt
用于加密密码cors
允许跨域资源共享body-parser
用于解析请求正文中的 JSON 数据
2. 创建 Express 应用程序
创建一个名为 app.js
的新文件,并添加以下代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- ------ - ------------------ ----- --- - ------------------------ ----- ---- - ---------------- ----- --- - ---------- ---------------- --------------------------- ----- ---- - ----- ---------------- -- -- - ------------------- ------- -- ---- ---------- ---
在上面的代码中,我们导入所需的所有依赖项,并使用 app.use
方法添加了 cors
和 body-parser
中间件。
3. 添加用户注册和登录路由
我们需要添加路由来处理用户注册和登录。在 app.js
文件的末尾添加以下代码:
-- -------------------- ---- ------- ----- ----- - --- --------------------- ----- ----- ---- -- - ----- - --------- -------- - - --------- ----- -------------- - ----- --------------------- ---- ------------ --- ------------ - -- --------- --------- --------------- --- -------------------------- ------- --------------- --- ------------------ ----- ----- ---- -- - ----- - --------- -------- - - --------- ----- ---- - ----------------- -- ------------- --- ---------- -- ------- - ------ ----------------------------- ----- -------------- - -- ------ ------------------------ --------------- - ----- ----- - ---------- --- ------- -- ------------- - ---------- ---- --- ------ ---------------------- ----- --- - ----------------------------- ----- -------------- ---
在上面的代码中,我们使用以下路由:
/register
- 使用bcrypt
哈希方式加密密码,并将新用户保存到一个数组中。/login
- 验证用户凭据并返回 JWT。
4. 验证 JWT
我们需要添加中间件来验证 JWT 和保护我们的资源。在 app.js
文件中添加以下代码:
-- -------------------- ---- ------- ----- ----------------- - ----- ---- ----- -- - ----- ---------- - ----------------------------- ----- ----- - ---------- -- ------------------ ------ -- ------ -- ----- - ------ -------------------- - ----------------- ------------- ----- ----- -- - -- ----- - ------ -------------------- - -------- - ----- ------- --- -- --------------------- ------------------ ----- ---- -- - ---------- -------- ----- -- - --------- ------ --- ---
在上面的代码中,我们使用以下中间件:
authenticateToken
- 用于验证 JWT 并将解码的用户对象添加到请求对象中。/protected
- 受保护的路由,只有具有有效 JWT 的用户才可以访问。
示例代码
下面是一个完整的 app.js
文件示例,可供您参考:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- ------ - ------------------ ----- --- - ------------------------ ----- ---- - ---------------- ----- --- - ---------- ---------------- --------------------------- ----- ----- - --- ----- ----------------- - ----- ---- ----- -- - ----- ---------- - ----------------------------- ----- ----- - ---------- -- ------------------ ------ -- ------ -- ----- - ------ -------------------- - ----------------- ------------- ----- ----- -- - -- ----- - ------ -------------------- - -------- - ----- ------- --- -- --------------------- ----- ----- ---- -- - ----- - --------- -------- - - --------- ----- -------------- - ----- --------------------- ---- ------------ --- ------------ - -- --------- --------- --------------- --- -------------------------- ------- --------------- --- ------------------ ----- ----- ---- -- - ----- - --------- -------- - - --------- ----- ---- - ----------------- -- ------------- --- ---------- -- ------- - ------ ----------------------------- ----- -------------- - -- ------ ------------------------ --------------- - ----- ----- - ---------- --- ------- -- ------------- - ---------- ---- --- ------ ---------------------- ----- --- - ----------------------------- ----- -------------- --- --------------------- ------------------ ----- ---- -- - ---------- -------- ----- -- - --------- ------ --- --- ----- ---- - ----- ---------------- -- -- - ------------------- ------- -- ---- ---------- ---
总结
在本文中,我们学习了如何使用 Express.js 和 JWT 实现用户身份验证。我们使用 jsonwebtoken
和 bcrypt
包来创建和验证 JWT,并使用 cors
和 body-parser
中间件来解决跨域问题和解析 JSON 数据。我们还看到了如何验证 JWT 并保护受限资源。如果您遵循本文的步骤,就可以按照自己的需求构建自己的 Web 应用程序和 REST API。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646d10f0968c7c53b0be32e4