jsonwebtoken.sign() 失败并设置了 expiresIn 选项
jsonwebtoken.sign() fails with expiresIn option set
我需要通过使用 JWT:
签署用户 ID 来获取令牌
var token = jwt.sign(accounts[request.headers.login].id, privateKey, {expiresIn: 60});
其中 id
和 privateKey
是字符串。
错误是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);
});
};
我需要通过使用 JWT:
签署用户 ID 来获取令牌var token = jwt.sign(accounts[request.headers.login].id, privateKey, {expiresIn: 60});
其中 id
和 privateKey
是字符串。
错误是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);
});
};