我正在尝试为我的 JWT cookie 设置 maxAge,我已为其配置了 20 分钟,即 1198 秒。 变量 maxAgeInSeconds 是正确的,但是浏览器设置了错误的时间(我认为这是由于时区偏移造成的)
示例 cookie maxAge 存储为 20:15 PM,而实际上应该是 17:15 PM
JWT 示例 -> eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJJZCI6Ijc5OTExNTI4LThjOGItNDcxNi05MTQ5LTRiMTJjMWJlyzFiNyIsIklzQWRtaW4iOnRydWUSIlJvbGVzIjpbIkFkbWluU29mdExpbMUiLCJVc 3VhcmlvU29mdExpbmUiXSwiaWF0IjoxNzE0NDIwNTMwLCJleHAiOjE3MTQ0MjE3MzB9.Kj7nJqHHeBc5f5o0PllCa-eURAbsRCmILiOvscpZoN4
const accessToken = jwt.sign(
{
Id: user.UserId,
Roles: roles
},
"SECRET",
{ expiresIn: "20m" }
)
const decodedJWT = utils.decodeJWT(accessToken);
// Convert to milliseconds
const expirationTime = decodedJWT.exp * 1000;
const currentTime = new Date().getTime();
// Convert to seconds
const maxAgeInSeconds = Math.floor((expirationTime - currentTime) / 1000);
const serialized = serialize('token', accessToken, {
httpOnly: true,
secure: process.env.MODE === 'production',
sameSite: 'strict',
maxAge: maxAgeInSeconds,
path: '/',
});
res.setHeader('Set-Cookie', serialized);
我不确定,但我认为
maxAge
属性应该以毫秒为单位传递。
也许尝试使用内置的 Express
res.cookie()
响应方法,而不是手动设置标头。
文档:https://expressjs.com/en/api.html#res.cookie
注意
maxAge
属性应以毫秒形式传递,而不是秒!
用法几乎相同:
res.cookie('token', accessToken, {
httpOnly: true,
secure: process.env.MODE === 'production',
sameSite: 'strict',
maxAge: maxAgeInSeconds *1000, //milisecods!
path: '/',
});
res.status(200).json({status: 'success'})