为什么 jwt.sign() 方法只适用于字符串密钥?

why jwt.sign() method only works on string secret key?

我正在尝试学习 JWT 身份验证令牌,但我遇到了问题。

在我的代码中,这一行工作正常。

const token = jwt.sign({ foo: 'bar' }, 'ea7aae59cedb7346c');

但是这条线不起作用。

const token = jwt.sign({ foo: 'bar' }, ea7aae59cedb7346c);

对我来说,当我尝试将 jet 身份验证密钥 内联 而不使其成为 字符串值 时,它似乎并没有没用。

为什么会这样? jwt.sign()方法中的stringified key valueregular key value有什么区别?

感谢您提出这个问题。 "secretOrPrivateKey is a string, buffer, or object containing either the secret for HMAC algorithms or the PEM encoded private key for RSA and ECDSA." 如https://www.npmjs.com/package/jsonwebtoken

所述

我已经将我的 .env 文件放入其中,它工作正常。 像这样。

.env 文件密钥是这样的。

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

Source

const token = jwt.sign({ foo: 'bar' }, 'shhhhh');

payload could be an object literal, buffer or string representing valid JSON.

所以在你的情况下你将 "payload" 作为对象传递并且 "secret" 是 "shhhhh"

根据文档

secretOrPrivateKey is a string, buffer, or object containing either the secret for HMAC algorithms or the PEM encoded private key for RSA and ECDSA.

所以你没有提供有效的参数,它是长值而不是字符串

您可以将值作为字符串传递或在 secretOrPrivateKey 中传递算法 像这样

hmacSha256(key, message) {}