jsonwebtoken.sign() 失败并设置了 expiresIn 选项
Posted
技术标签:
【中文标题】jsonwebtoken.sign() 失败并设置了 expiresIn 选项【英文标题】:jsonwebtoken.sign() fails with expiresIn option set 【发布时间】:2016-05-09 22:50:06 【问题描述】:我需要通过使用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
。
如果我完全删除选项对象,它可以工作,但没有我需要设置的选项。
问题似乎很简单,但我不知道如何解决,我做错了什么?
【问题讨论】:
【参考方案1】:如果您希望能够设置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
)
【讨论】:
"请务必提供时间单位(天、小时等),否则默认使用毫秒单位" 这将是 60 毫秒而不是 60 秒 @Seb 请编辑我的答案!以提供单位为例;) 我从 *** 收到“建议的编辑队列已满”错误 有效负载!!!!需要和对象(涌出多么糟糕的错误消息), 还有:60d 应该是 '60d'【参考方案2】:在我的例子中,引用环境变量的文件名错误。
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
【讨论】:
【参考方案3】:https://www.npmjs.com/package/jsonwebtoken#jwtsignpayload-secretorprivatekey-options-callback
payload 可以是对象文字、缓冲区或字符串。 请注意,仅当有效负载是对象文字时才会设置 exp。
【讨论】:
哦,如果有效负载是字符串,我似乎无法设置过期日期。谢谢!以上是关于jsonwebtoken.sign() 失败并设置了 expiresIn 选项的主要内容,如果未能解决你的问题,请参考以下文章
循环引用阻止 jsonwebtoken.sign JSON.stringify 的原因