首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jsonwebtoken:什么是有效负载

jsonwebtoken:什么是有效负载
EN

Stack Overflow用户
提问于 2019-03-08 19:39:38
回答 1查看 3.9K关注 0票数 5

我想使用json令牌来验证用户,我即将使用jwt.sign方法,但根据维基百科的有效载荷定义(在计算中),“有效载荷”一词使我感到困惑:

在计算和电信中,有效载荷是传输数据的一部分,即实际预期的消息。只发送标头和元数据以启用有效负载交付。

但根据中码

代码语言:javascript
运行
复制
    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);
        }
      });
    }
  });
});

有效负载是用户提供的用于身份验证的电子邮件,这使我感到困惑,如果有人解释什么是有效负载和有效负载在jwt.sign()中的作用,我会很高兴。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-08 19:44:18

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

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

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

代码语言:javascript
运行
复制
{
  user_id: 303,
  account_id: 909,
  email: 'joe@example.com',
  full_name: 'Joe Blow',
  default_language: 'en_US'
}

警告:有效载荷是而不是加密的,所以请确保不要在其中存储密码、密匙、信用卡号码、银行帐户余额等内容。只有您在URL或公钥中看到的ID之类的标识符才应该存储。

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

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55069938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档