23

我需要通过使用JWT签署用户 ID 来获取令牌:

var token = jwt.sign(accounts[request.headers.login].id, privateKey, {expiresIn: 60});

WhereidprivateKey是字符串。

错误是Error: Uncaught error: "expiresIn" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60。如果我完全删除选项对象,它可以工作,但没有我需要设置的选项。

这个问题似乎很简单,但我不知道如何解决它,我做错了什么?

4

3 回答 3

35

https://www.npmjs.com/package/jsonwebtoken#jwtsignpayload-secretorprivatekey-options-callback

有效负载可以是对象文字、缓冲区或字符串。请注意,仅当有效负载是对象文字时才设置 exp。

于 2016-02-01T19:11:10.717 回答
12

如果您希望能够设置选项,请将有效负载设置为对象expiresIn

var token = jwt.sign(
    {id: accounts[request.headers.login].id}, // object and not string
    privateKey,
    {expiresIn: '60d'} // added days, default for ex 60 would be ms, you can also provide '1h' etc
)
于 2020-12-23T18:26:59.417 回答
0

就我而言,这是一个错误的文件名,它引用了 env 变量。

technicianAuthSchema.methods.getSignedToken = async function() {
return jwt.sign( { id: this._id }, process.env.JWT_SECRET, { expiresIn: process.env.EXPIRE, } );};

而不是这个

technicianAuthSchema.methods.getSignedToken = async function() {
return jwt.sign( { id: this._id }, process.env.JWT_SECRET, { expiresIn: process.env.JWT_EXPIRE, } );};

错误的文件名:expiresIn:process.env.EXPIRE
正确的文件名:expiresIn:process.env.JWT_EXPIRE

于 2021-04-30T12:14:55.320 回答