使用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');
});

代码解析

  1. 引入 **jsonwebtoken**jwt.verify() 方法用于验证传入的 Token 是否有效。
  2. 获取 Token:从请求头的 Authorization 字段中获取 Token,确保格式正确。
  3. 验证 Token:使用 jwt.verify() 方法验证 Token,解析后的 decoded 对象包含了用户信息。
  4. 管理员检查:解码后的 Token 如果包含 role: 'admin',则用户具有管理员权限。
  5. 错误处理:对 Token 进行错误捕获,处理无效或过期的 Token,并返回相应的 HTTP 状态码。
posted @ 2025-03-30 15:50  海浪博客  阅读(134)  评论(0)    收藏  举报