У меня есть сервер (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, а второй — фактический пост (именно так браузеры обычно обрабатывают запросы).