在现代的 Web 应用程序中,用户认证和授权是必不可少的部分。JSON Web Token(JWT)是一种用于在网络应用程序之间安全传递信息的开放标准。它可以在用户和服务器之间传递安全的信息,以验证用户的身份并授权访问特定的资源。本文将介绍如何在 Express.js 中使用 JWT 实现用户认证和授权。
什么是 JSON Web Token?
JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。JWT 可以使用任何编程语言进行编写,且无需使用数据库。JWT 由三部分组成:头部、载荷和签名。头部包含加密算法和类型信息,载荷包含用户信息和其他元数据,签名用于验证 JWT 是否被篡改。
步骤
以下是在 Express.js 中使用 JWT 的详细步骤:
1. 安装依赖
使用 npm 安装 jsonwebtoken 和 express-jwt:
npm install jsonwebtoken express-jwt
jsonwebtoken 用于创建和验证 JWT,express-jwt 用于验证 JWT 和检查用户是否已登录。
2. 创建 JWT
在服务器端,您需要创建 JWT 并将其发送给客户端。以下是创建 JWT 的示例代码:
const jwt = require('jsonwebtoken'); const payload = { username: 'john.doe', role: 'admin' }; const secret = 'your-secret-key'; const token = jwt.sign(payload, secret, { expiresIn: '1h' });
在此代码中,payload 是要添加到 JWT 载荷中的信息,secret 是用于签名 JWT 的密钥。expiresIn 选项指定 JWT 的过期时间。
3. 验证 JWT
在客户端发送请求时,您需要验证 JWT 是否有效。以下是使用 express-jwt 验证 JWT 的示例代码:
const expressJwt = require('express-jwt'); const secret = 'your-secret-key'; app.get('/protected', expressJwt({ secret }), (req, res) => { // 如果 JWT 有效,则执行该代码块 });
在此代码中,secret 是用于签名 JWT 的密钥。expressJwt 中间件将验证 JWT 是否有效,并将 req.user 设置为 JWT 载荷中的信息。
4. 检查用户登录状态
在某些情况下,您需要检查用户是否已登录,然后才能授予对某些资源的访问权限。以下是使用 express-jwt 检查用户登录状态的示例代码:
-- -------------------- ---- ------- ----- ---------- - ----------------------- ----- ------ - ------------------ --------------------- ------------ ------ --- ----- ---- -- - -- ----------- - ------ ---------------------- -------- -------------- --- - -- --------------- ---
在此代码中,如果 req.user 未定义,则表示用户未登录,因此返回 401 状态码。否则,用户已登录,可以授予对该资源的访问权限。
总结
本文介绍了在 Express.js 中使用 JWT 实现用户认证和授权的详细步骤。JWT 是一种安全的方式,用于在网络应用程序之间传递信息,以验证用户的身份并授权访问特定的资源。通过遵循本文中的步骤,您可以轻松地在 Express.js 中使用 JWT 实现用户认证和授权。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65d9a5cd1886fbafa4720d3b