颁发token

    jsonwebtoken(通常缩写为 jwt)是一个用于在网络应用环境间安全传输信息的 JSON 基于的开放标准(RFC 7519)。该令牌由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。JWT 可以被验证和信任,因为它们是经过数字签名的。在 Node.js 中,我们可以使用 jsonwebtoken 库来创建和验证 JWT。


    步骤 1:安装 jsonwebtoken

    首先,你需要安装 jsonwebtoken

    1pnpm add 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 应用中的安全通信问题。