颁发token
jsonwebtoken
(通常缩写为 jwt
)是一个用于在网络应用环境间安全传输信息的 JSON 基于的开放标准(RFC 7519)。该令牌由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。JWT 可以被验证和信任,因为它们是经过数字签名的。在 Node.js 中,我们可以使用 jsonwebtoken
库来创建和验证 JWT。
步骤 1:安装 jsonwebtoken
首先,你需要安装 jsonwebtoken
:
步骤 2:创建 JWT
在用户登录成功后,使用 jsonwebtoken
创建一个 JWT:
1const jwt = require('jsonwebtoken');
2
3const secretKey = 'your-secret-key'; // 应该是一个只有服务器知道的字符串
4
5function generateToken(payload) {
6 return jwt.sign(payload, secretKey, { expiresIn: '1h' }); // 设置过期时间
7}
步骤 3:验证 JWT
在需要验证用户身份的路由或中间件中,使用 jsonwebtoken
验证 JWT:
1const jwt = require('jsonwebtoken');
2
3const secretKey = 'your-secret-key';
4
5function verifyToken(token) {
6 return jwt.verify(token, secretKey);
7}
步骤 4:使用 JWT 进行身份验证
将创建和验证 JWT 的函数集成到用户登录和需要保护的路由中:
1const express = require('express');
2const app = express();
3
4app.post('/login', (req, res) => {
5 // 假设我们验证了用户的用户名和密码
6 const user = { id: 1, username: 'example' };
7 const token = generateToken(user);
8 res.send({ token });
9});
10
11app.get('/protected', (req, res) => {
12 const token = req.headers['authorization'];
13
14 try {
15 const decoded = verifyToken(token);
16 res.send(`Hello, ${decoded.username}`);
17 } catch (error) {
18 res.status(401).send('Unauthorized');
19 }
20});
21
22app.listen(3000, () => {
23 console.log('Server is running on http://localhost:3000');
24});
步骤 5:错误处理
在使用 jsonwebtoken
时,确保妥善处理任何可能发生的错误,例如在验证过程中:
1function verifyToken(token) {
2 try {
3 return jwt.verify(token, secretKey);
4 } catch (error) {
5 console.error('Error verifying token:', error);
6 throw error;
7 }
8}
通过这些步骤,你可以在你的 Node.js 应用中安全地创建和验证 JWT,从而实现用户身份验证和授权。jsonwebtoken
提供了一个简单而有效的方式来处理 Web 应用中的安全通信问题。