'jsonwebtoken.sign() fails with expiresIn option set
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?
Solution 1:[1]
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.
Solution 2:[2]
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
)
Solution 3:[3]
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
Solution 4:[4]
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);
});
};
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | dcy |
| Solution 2 | |
| Solution 3 | SanRaph |
| Solution 4 |
