Куки HttpOnly устанавливаются только после второго запроса

У меня есть сервер (Node.js + Nest.js) и клиент (Angular 11).

Клиент отправляет запрос на вход, а сервер регистрирует пользователя и устанавливает в ответ файл cookie HttpOnly.
Странно то, что файл cookie устанавливается в браузере только после отправки 2 запросов, после чего он работает нормально (например, если я использую почтальона, он без проблем сохраняет файл cookie). Я вижу в каждом ответе (даже первом) файл cookie, установленный в заголовках.

код клиента:

this.http.post<LoginResponse>(`server_path/login`, {
      email: '[email protected]',
      password: '12345678',
      rememberMe: false
}).subscribe(_ => console.info('Logged in!'), _ => console.info('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 как на клиенте, так и на сервере.

Можете ли вы опубликовать полный код на стороне сервера, а также включить операторы импорта для серверной и клиентской сторон, пожалуйста? Одна из идей может заключаться в том, что первый запрос, отправленный клиентом, — это просто HEAD, а второй — фактический пост (именно так браузеры обычно обрабатывают запросы).

Simon van Endern 26.12.2020 08:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
268
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В конце концов, моя проблема решилась просто очисткой кеша браузера, понятия не имею, почему это так (только в хроме), но теперь все работает как положено.

Другие вопросы по теме