javascript - 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
在客户端和服务器上都使用它。
解决方案
最后解决我的问题的事情只是清除浏览器缓存,不知道为什么会这样(仅在 chrome 中),但现在一切都按预期工作。
推荐阅读
- python - 如何在 PyCharm 上使用 fancyimpute
- javascript - 将 IF 条件添加到可点击图像以确定像素值
- javascript - querySelectorAll() 匹配除 div 之外的所有 h1
- python - python中函数内for循环中的return语句
- angular - 使用接口定义新类型
- php - Axios DELETE 请求正文被发送为空
- c# - 即使我选中它,复选框值也始终为空
- regex - Flutter - TextFormField 中的正则表达式
- c# - 如何在流利的迁移器中捕获特定的 SQL 异常?
- arrays - 如何创建一个新的数组(C),将一个数字与一个二维数组(D)相乘,然后添加第二个数组(B)?