jsonwebtoken 的使用方式及常用 API

jsonwebtoken 是一个用于生成和验证 JSON Web Tokens (JWT) 的库。以下是 jsonwebtoken 的使用方式及常用 API:

安装

首先,安装 jsonwebtoken 包:

npm install jsonwebtoken

生成 JWT

使用 jsonwebtokensign 方法生成 JWT。

const jwt = require('jsonwebtoken');

// 生成 JWT
function generateToken(payload, secretKey, expiresIn) {
  return jwt.sign(payload, secretKey, { expiresIn });
}

// 示例
const token = generateToken({ userId: 1, username: 'user1' }, 'your_jwt_secret', '1h');
console.log(token);

验证 JWT

使用 jsonwebtokenverify 方法验证 JWT。

const jwt = require('jsonwebtoken');

// 验证 JWT
function verifyToken(token, secretKey) {
  try {
    const decoded = jwt.verify(token, secretKey);
    return decoded;
  } catch (error) {
    console.error('Invalid token:', error.message);
    return null;
  }
}

// 示例
const decoded = verifyToken(token, 'your_jwt_secret');
if (decoded) {
  console.log('Token is valid:', decoded);
} else {
  console.log('Invalid token');
}

常用 API

  1. jwt.sign(payload, secretOrPrivateKey, [options])

    • 用途:生成 JWT。
    • 参数
      • payload:要编码的数据对象。
      • secretOrPrivateKey:用于签名的密钥或私钥。
      • options(可选):配置选项,如 expiresIn(过期时间)、algorithm(签名算法)等。
    • 返回值:生成的 JWT 字符串。
  2. jwt.verify(token, secretOrPublicKey, [options, callback])

    • 用途:验证 JWT。
    • 参数
      • token:要验证的 JWT 字符串。
      • secretOrPublicKey:用于验证的密钥或公钥。
      • options(可选):配置选项,如 algorithms(允许的签名算法)等。
      • callback(可选):回调函数,用于处理验证结果。
    • 返回值:解码后的 payload 对象,如果验证失败则抛出错误。
  3. jwt.decode(token, [options])

    • 用途:解码 JWT,但不验证签名。
    • 参数
      • token:要解码的 JWT 字符串。
      • options(可选):配置选项,如 complete(返回完整的 token 对象)等。
    • 返回值:解码后的 payload 对象,如果 complete 选项为 true,则返回完整的 token 对象。

示例代码

以下是一个完整的示例,展示了如何在用户登录时生成 JWT,并在后续请求中验证 JWT。

const express = require('express');
const jwt = require('jsonwebtoken');

const app = express();
app.use(express.json());

const JWT_SECRET = 'your_jwt_secret';

// 生成 JWT
function generateToken(payload) {
  return jwt.sign(payload, JWT_SECRET, { expiresIn: '1h' });
}

// 验证 JWT
function verifyToken(token) {
  try {
    const decoded = jwt.verify(token, JWT_SECRET);
    return decoded;
  } catch (error) {
    console.error('Invalid token:', error.message);
    return null;
  }
}

// 登录路由
app.post('/login', (req, res) => {
  const { username, password } = req.body;
  // 假设验证用户名和密码成功
  const user = { id: 1, username };
  const token = generateToken(user);
  res.json({ token });
});

// 受保护的路由
app.get('/protected', (req, res) => {
  const token = req.headers['authorization']?.split(' ')[1];
  if (!token) {
    return res.status(401).json({ message: 'No token provided' });
  }

  const decoded = verifyToken(token);
  if (!decoded) {
    return res.status(401).json({ message: 'Invalid token' });
  }

  res.json({ message: 'This is a protected route', user: decoded });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

总结

通过上述步骤和 API,你可以在应用中使用 jsonwebtoken 生成和验证 JWT,从而实现安全的用户认证和授权机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值