jsonwebtoken.sign() 失败并设置了 expiresIn 选项

jsonwebtoken.sign() fails with expiresIn option set

我需要通过使用 JWT:

签署用户 ID 来获取令牌
var token = jwt.sign(accounts[request.headers.login].id, privateKey, {expiresIn: 60});

其中 idprivateKey 是字符串。

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

这个问题看起来很简单,但我不知道如何解决,我做错了什么?

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

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

如果您希望能够设置 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
)

在我的例子中,引用环境变量的文件名错误。

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, } );};

Wrong file name: expiresIn: process.env.EXPIRE
Correct file name: expiresIn: process.env.JWT_EXPIRE

我也面临同样的问题question.There是我的答案。 初始代码

const setToken = function (data) {
  return new Promise((resolve, reject) => {
    const token = jwt.sign( data , signkey, { expiresIn: "1d" });
    resolve(token);
  });
};

第一个参数(data)应该是object或者加大括号({}); 编辑后的代码

const setToken = function (data) {
  return new Promise((resolve, reject) => {
    const token = jwt.sign({ data }, signkey, { expiresIn: "1d" });
    resolve(token);
  });
};