使用jsonwebtoken进行 JWT 验证
使用 jsonwebtoken 进行 JWT 验证
在 Express 中,如果想要验证 JWT(JSON Web Token),可以使用 jsonwebtoken 库,因为 express-jwt 仅提供中间件功能,而不能直接调用 verify 方法。下面是如何正确使用 jsonwebtoken 进行 Token 解析和验证的示例代码。
安装 jsonwebtoken
如果还未安装 jsonwebtoken,可以使用以下命令安装:
npm install jsonwebtoken
示例代码
const jwt = require('jsonwebtoken'); // 确保引入正确的 jwt 库
const express = require('express');
const app = express();
app.use(express.json()); // 解析 JSON 请求体
const secretKey = 'your_secret_key'; // 请使用更安全的密钥存储方式
app.post('/verify-token', (req, res) => {
const { messageId, qqNumber } = req.body; // 获取留言 ID 和 QQ 号
const token = req.headers.authorization; // 从请求头获取 Token(管理员才有权限)
if (!token) {
return res.status(401).json({ error: 'Token is required' });
}
// 确保 token 以 'Bearer ' 开头,并移除它
if (!token.startsWith('Bearer ')) {
return res.status(400).json({ error: 'Invalid token format' });
}
try {
// 验证 Token
const decoded = jwt.verify(token.replace('Bearer ', ''), secretKey);
// 输出解码后的结果
console.log('decoded', decoded);
// 进一步处理 decoded 内容,比如判断是否是管理员
if (decoded && decoded.role === 'admin') {
console.log('Admin user authenticated');
res.json({ message: 'Token is valid', user: decoded });
} else {
res.status(403).json({ error: 'Not an admin user' });
}
} catch (error) {
console.error('JWT verification failed:', error.message);
res.status(401).json({ error: 'Invalid or expired token' });
}
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
代码解析
- 引入
**jsonwebtoken**:jwt.verify()方法用于验证传入的 Token 是否有效。 - 获取 Token:从请求头的
Authorization字段中获取 Token,确保格式正确。 - 验证 Token:使用
jwt.verify()方法验证 Token,解析后的decoded对象包含了用户信息。 - 管理员检查:解码后的 Token 如果包含
role: 'admin',则用户具有管理员权限。 - 错误处理:对 Token 进行错误捕获,处理无效或过期的 Token,并返回相应的 HTTP 状态码。

浙公网安备 33010602011771号