JWT(JSON Web Token)是一种用于在网络应用之间传递信息的简洁方式,它可以通过数字签名来验证数据的可靠性和完整性。在前端开发中,使用 JWT 进行身份验证是非常常见的。在本文中,我们将探讨如何在 Express.js 中使用 JWT 验证。
什么是 JWT?
JWT 是一种基于 JSON 的开放标准(RFC 7519),用于在网络应用之间传递信息。它由三部分组成:头部、载荷和签名。例如:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
其中,头部包含了算法和类型信息,载荷包含了需要传递的数据,签名则用于验证数据的可靠性。
如何在 Express.js 中使用 JWT 验证?
在 Express.js 中使用 JWT 验证非常简单。我们可以使用 jsonwebtoken
模块来生成和验证 JWT。下面是一个示例:
// javascriptcn.com 代码示例 const jwt = require('jsonwebtoken'); // 生成 JWT const token = jwt.sign({ username: 'john.doe' }, 'secret', { expiresIn: '1h' }); // 验证 JWT jwt.verify(token, 'secret', (err, decoded) => { if (err) { // 验证失败 } else { // 验证成功 } });
在上面的示例中,我们使用 jwt.sign
方法生成 JWT,其中第一个参数是需要传递的数据,第二个参数是用于签名的密钥,第三个参数是可选的配置项(例如过期时间)。然后,我们使用 jwt.verify
方法验证 JWT,其中第一个参数是需要验证的 JWT,第二个参数是用于验证的密钥,第三个参数是回调函数,用于处理验证结果。
在实际开发中,我们通常会将 JWT 存储在客户端的 Cookie 或 localStorage 中,并将其发送到服务器进行验证。下面是一个示例:
// javascriptcn.com 代码示例 const express = require('express'); const jwt = require('jsonwebtoken'); const app = express(); app.use(express.json()); // 登录接口 app.post('/login', (req, res) => { const { username, password } = req.body; // 验证用户名和密码 if (username === 'john.doe' && password === 'password') { // 生成 JWT const token = jwt.sign({ username }, 'secret', { expiresIn: '1h' }); // 将 JWT 存储在 Cookie 中 res.cookie('token', token, { httpOnly: true }); res.json({ success: true }); } else { res.status(401).json({ success: false, message: '用户名或密码错误' }); } }); // 需要验证的接口 app.get('/profile', (req, res) => { const token = req.cookies.token; if (!token) { return res.status(401).json({ success: false, message: '未登录' }); } // 验证 JWT jwt.verify(token, 'secret', (err, decoded) => { if (err) { return res.status(401).json({ success: false, message: '登录已过期' }); } // 获取用户名 const { username } = decoded; res.json({ success: true, username }); }); }); app.listen(3000, () => { console.log('Server started on port 3000'); });
在上面的示例中,我们定义了一个 /login
接口,用于验证用户名和密码并生成 JWT,并将 JWT 存储在客户端的 Cookie 中。然后,我们定义了一个 /profile
接口,用于获取用户信息,并验证客户端的 JWT。如果 JWT 不存在或已过期,则返回 401 状态码。否则,返回用户信息。
总结
在本文中,我们探讨了如何在 Express.js 中使用 JWT 验证。JWT 是一种用于在网络应用之间传递信息的简洁方式,可以通过数字签名来验证数据的可靠性和完整性。在 Express.js 中使用 JWT 验证非常简单,我们可以使用 jsonwebtoken
模块来生成和验证 JWT。在实际开发中,我们通常会将 JWT 存储在客户端的 Cookie 或 localStorage 中,并将其发送到服务器进行验证。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/655ed02cd2f5e1655d8f58cf