我想使用JSON Web代币来验证用户,我将使用JWT.Sign方法,但是"有效载荷"术语根据Wikipedia有效载荷定义(计算)为:
在计算和电信中,有效载荷是传输数据的一部分,是实际预期的消息。标题和元数据仅被发送以启用有效载荷交付。[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);
}
});
}
});
});
有效载荷是用户提供的电子邮件以进行身份验证,这使我感到困惑,如果有人解释什么是有效负载以及有效负载的角色,我将很高兴
在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是无状态的,这意味着它们不是会议。因此,不要包括任何经常更改的数据,例如游戏得分,最后一个签名等。