36

I need to get a token by signing a user ID with JWT:

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

Where id and privateKey are strings.

The error is Error: Uncaught error: "expiresIn" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60. If I remove options object at all, it works, but without options I need to set.

The issue seems to be simple but I don't know how to fix it, what am I doing wrong?

Sergei Basharov
  • 51,276
  • 73
  • 200
  • 335

4 Answers4

51

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

payload could be an object literal, buffer or string. Please note that exp is only set if the payload is an object literal.

dcy
  • 526
  • 5
  • 2
23

Set the payload as an object if you want to be able to set the expiresIn option

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
)
Pipo
  • 4,653
  • 38
  • 47
0

I am also facing the same question.There is my answer. the initial code

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

The first parameter(data) should be object or add braces({}); the edited code

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

In my case, it was a wrong file name that was referencing the env variables.

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

instead of this

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

SanRaph
  • 369
  • 3
  • 7