首页 > 解决方案 > HttpOnly cookie 仅在第二次请求后设置

问题描述

我有一个服务器(Node.js + Nest.js)和一个客户端(Angular 11)。

客户端提交登录请求,服务器登录用户并HttpOnly在响应中设置 cookie。
奇怪的是,cookie仅在提交 2 个请求后才在浏览器中设置,然后它工作正常(例如,如果我使用邮递员,它会毫无问题地保存 cookie)。我可以在每个响应(甚至是第一个响应)中看到标题中设置的 cookie。

客户端代码:

this.http.post<LoginResponse>(`server_path/login`, {
      email: 'example@gmail.com',
      password: '12345678',
      rememberMe: false
}).subscribe(_ => console.log('Logged in!'), _ => console.log('wrong credentials'))

服务器代码:

const { result, error } = await this.authService.loginLocalUser(req.user, body.rememberMe)
if (error) throw new UnauthorizedException()

if (body.rememberMe) {
  const oneYearFromNow = new Date()
  oneYearFromNow.setFullYear(oneYearFromNow.getFullYear() + 1)
  res.cookie('refreshToken', result.refreshToken, { httpOnly: true, expires: oneYearFromNow })
} else
  res.cookie('refreshToken', result.refreshToken, { httpOnly: true })

return { accessToken: result.accessToken }

编辑:即使设置了 cookie(第二次之后),我也看不到它在请求中发送,即使我credentials: true在客户端和服务器上都使用它。

标签: javascriptnode.jshttpcookies

解决方案


最后解决我的问题的事情只是清除浏览器缓存,不知道为什么会这样(仅在 chrome 中),但现在一切都按预期工作。


推荐阅读