Web cookies maxAge 错误

问题描述 投票:0回答:1

我正在尝试为我的 JWT cookie 设置 maxAge,我已为其配置了 20 分钟,即 1198 秒。 变量 maxAgeInSeconds 是正确的,但是浏览器设置了错误的时间(我认为这是由于时区偏移造成的)

示例 cookie maxAge 存储为 20:15 PM,而实际上应该是 17:15 PM

JWT 示例 -> eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJJZCI6Ijc5OTExNTI4LThjOGItNDcxNi05MTQ5LTRiMTJjMWJlyzFiNyIsIklzQWRtaW4iOnRydWUSIlJvbGVzIjpbIkFkbWluU29mdExpbMUiLCJVc 3VhcmlvU29mdExpbmUiXSwiaWF0IjoxNzE0NDIwNTMwLCJleHAiOjE3MTQ0MjE3MzB9.Kj7nJqHHeBc5f5o0PllCa-eURAbsRCmILiOvscpZoN4

cookie maxAge example

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);
javascript node.js express cookies
1个回答
0
投票

我不确定,但我认为

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'})
© www.soinside.com 2019 - 2024. All rights reserved.