2 回答
TA贡献1842条经验 获得超12个赞
好的,所以我想通了!
事实证明(通过查看 jsonwebtoken 文档上的示例)签署令牌时使用的 iat 属性应该以秒为单位而不是毫秒。因此,Date.now()在 tokens.js 实际上应该是Math.floor(Date.now / 1000):
// In token.js (used to issue JWT)
const jsonwebtoken = require("jsonwebtoken");
// ...
const issueJWT = (user) => {
const _id = user._id;
const expiresIn = 30; // 30s for testing purposes
const payload = {
sub: _id,
iat: Math.floor(Date.now() / 1000),
};
const signedToken = jsonwebtoken.sign(payload, PRIV_KEY, {
expiresIn: expiresIn,
algorithm: "RS256",
});
return {
token: "Bearer " + signedToken,
expires: expiresIn,
};
};
TA贡献1824条经验 获得超8个赞
我认为您应该在对象中设置Maxage
令牌jwt
的 ,options
因为护照正在使用jsonwebtoken
模块验证令牌,而且如果您将ignoreExpiration
选项设置为 true 护照将不会验证令牌的过期,我知道情况并非如此,因为我可以'在你的代码中看不到它,但我最好的猜测是你必须Maxage
像这样设置你的选项{ expiresIn: '1h' }
从文档
jsonWebTokenOptions:passport-jwt 正在使用 jsonwebtoken 验证令牌。在此处为您可以传递 jsonwebtoken 验证程序的任何其他选项传递一个选项对象。(即maxAge)
如果您想了解有关jsonwebtoken的更多信息
添加回答
举报