Node.js jsonwebtoken:什么是有效负载

Node.js jsonwebtoken:什么是有效负载,node.js,express,jwt,payload,Node.js,Express,Jwt,Payload,我想使用json web令牌来验证用户,我即将使用jwt.sign方法,但根据维基百科计算中的有效负载定义,有效负载术语让我感到困惑: 在计算和电信中,有效载荷是传输数据的一部分,即实际的预期消息。发送头和元数据只是为了启用有效负载传递。[1][2] 但根据媒体代码 const jwt = require('jsonwebtoken'); app.post('/api/authenticate', function(req, res) { const { email, passwor

我想使用json web令牌来验证用户,我即将使用jwt.sign方法,但根据维基百科计算中的有效负载定义,有效负载术语让我感到困惑:

在计算和电信中,有效载荷是传输数据的一部分,即实际的预期消息。发送头和元数据只是为了启用有效负载传递。[1][2]

但根据媒体代码

    const jwt = require('jsonwebtoken');
app.post('/api/authenticate', function(req, res) {
  const { email, password } = req.body;
  User.findOne({ email }, function(err, user) {
    if (err) {
      console.error(err);
      res.status(500)
        .json({
        error: 'Internal error please try again'
      });
    } else if (!user) {
      res.status(401)
        .json({
         error: 'Incorrect email or password'
        });
    } else {
      user.isCorrectPassword(password, function(err, same) {
        if (err) {
          res.status(500)
            .json({
              error: 'Internal error please try again'
          });
        } else if (!same) {
          res.status(401)
            .json({
              error: 'Incorrect email or password'
          });
        } else {
          // Issue token
          const payload = { email };
          const token = jwt.sign(payload, secret, {
            expiresIn: '1h'
          });
          res.cookie('token', token, { httpOnly: true })
            .sendStatus(200);
        }
      });
    }
  });
});

payload是用户提供的用于身份验证的电子邮件,这让我很困惑,如果有人解释什么是payload以及jwt中payload的角色,我会很高兴。sign

在JSON Web令牌中,payload是要包含在生成的令牌中的一组字段;比如说,您的API需要为特定用户获取正确的数据

它只是一个简单的JSON对象,通常用于包含用户标识详细信息,如用户ID、帐户ID或电子邮件地址。但是,它也可以包含您可能需要的任意数据,例如用户的全名、语言首选项等

一个示例负载可能如下所示,假设这些字段是API获取令牌所属用户/帐户详细信息所依赖的字段。注意,这将被视为相当大的有效载荷;大多数有效负载只有一个用户ID字段,因为这通常是端点正确识别用户所需的全部内容

{
  user_id: 303,
  account_id: 909,
  email: 'joe@example.com',
  full_name: 'Joe Blow',
  default_language: 'en_US'
}
警告:负载未加密,因此请确保不要在其中存储密码、密钥、信用卡号、银行帐户余额等内容。应该只存储像URL或公钥中的ID这样的标识符

此外,有效负载会影响令牌的总长度。更多数据意味着更长的令牌,因此您只希望包含最基本的数据段。否则,您将在每个请求上发送一个非常大的令牌,这会消耗带宽,理论上会占用更多的服务器资源进行解码


最后,JWT是无状态的,这意味着它们不是会话。因此,不要包含任何经常更改的数据,例如游戏分数、上次登录等。

在JSON Web令牌中,有效负载是要包含在生成的令牌中的一组字段;比如说,您的API需要为特定用户获取正确的数据

它只是一个简单的JSON对象,通常用于包含用户标识详细信息,如用户ID、帐户ID或电子邮件地址。但是,它也可以包含您可能需要的任意数据,例如用户的全名、语言首选项等

一个示例负载可能如下所示,假设这些字段是API获取令牌所属用户/帐户详细信息所依赖的字段。注意,这将被视为相当大的有效载荷;大多数有效负载只有一个用户ID字段,因为这通常是端点正确识别用户所需的全部内容

{
  user_id: 303,
  account_id: 909,
  email: 'joe@example.com',
  full_name: 'Joe Blow',
  default_language: 'en_US'
}
警告:负载未加密,因此请确保不要在其中存储密码、密钥、信用卡号、银行帐户余额等内容。应该只存储像URL或公钥中的ID这样的标识符

此外,有效负载会影响令牌的总长度。更多数据意味着更长的令牌,因此您只希望包含最基本的数据段。否则,您将在每个请求上发送一个非常大的令牌,这会消耗带宽,理论上会占用更多的服务器资源进行解码


最后,JWT是无状态的,这意味着它们不是会话。因此,不要包含任何经常更改的数据,例如游戏分数、上次登录等。

它必须是用户标识符,也可以是任何内容,例如随机字符串?@Jake它可以是您想要的任何内容。看到我用用户全名添加的示例了吗?我应该包括这类数据吗?@Jake,我在回答中再次提到了这一点。您应该在API中包含正确识别用户所需的最低限度的信息,仅此而已。大多数JWT都包含一个用户ID,仅此而已。明白了,我使用的是唯一的用户名,所以我认为它必须是用户标识符,或者它可以是任何东西,例如随机字符串?@Jake它可以是任何你想要的东西。看到我用用户全名添加的示例了吗?我应该包括这类数据吗?@Jake,我在回答中再次提到了这一点。您应该在API中包含正确识别用户所需的最低限度的信息,仅此而已。大多数JWT都包含一个用户ID,仅此而已。明白了,我使用的是唯一的用户名,所以我认为这就足够了