refresh_token cookie выставляется без Max-Age/Expires (src/modules/auth/presentation/auth.controller.tscookieOptions()), поэтому браузер считает её сессионной и удаляет при закрытии браузера/PWA. Серверная Session и refresh JWT при этом живут 7 дней. PWA обновляется только после закрытия всех окон (registerType: "prompt"), поэтому пользователь после каждого релиза вводит логин и пароль заново.
Expected Behavior
Refresh cookie переживает перезапуск браузера/PWA в пределах срока Session и продлевается при каждой ротации.
Scope
In scope
maxAge в cookieOptions(), значение из единой константы REFRESH_TTL_MS (auth.service.ts), общей с expiresAt Session.
Обновление HTTP-тестов cookie policy в test/app.e2e-spec.ts (сейчас они запрещают Max-Age).
Out of scope
Изменение срока жизни (остаётся 7 дней), grace/replay history, межвкладочная синхронизация.
Поведение фронтенда при 5xx/сетевой ошибке refresh (отдельная Issue во frontend).
Acceptance Criteria
Cookie при register/login/refresh содержит Max-Age, равный REFRESH_TTL_MS / 1000 (604800).
Остальные атрибуты не меняются: HttpOnly, SameSite=Lax, Path=/api/v1/auth, без Domain, Secure кроме development.
Logout и очистка cookie по-прежнему удаляют её (Expires в прошлом, без положительного Max-Age).
Срок cookie и Session.expiresAt определяются одной константой.
Verification
npm run test:e2e (app.e2e-spec.ts) и npm run verify.
## Problem
`refresh_token` cookie выставляется без `Max-Age`/`Expires` (`src/modules/auth/presentation/auth.controller.ts` `cookieOptions()`), поэтому браузер считает её сессионной и удаляет при закрытии браузера/PWA. Серверная Session и refresh JWT при этом живут 7 дней. PWA обновляется только после закрытия всех окон (`registerType: "prompt"`), поэтому пользователь после каждого релиза вводит логин и пароль заново.
## Expected Behavior
Refresh cookie переживает перезапуск браузера/PWA в пределах срока Session и продлевается при каждой ротации.
## Scope
### In scope
- `maxAge` в `cookieOptions()`, значение из единой константы `REFRESH_TTL_MS` (auth.service.ts), общей с `expiresAt` Session.
- Обновление HTTP-тестов cookie policy в `test/app.e2e-spec.ts` (сейчас они запрещают `Max-Age`).
### Out of scope
- Изменение срока жизни (остаётся 7 дней), grace/replay history, межвкладочная синхронизация.
- Поведение фронтенда при 5xx/сетевой ошибке refresh (отдельная Issue во frontend).
## Acceptance Criteria
- [ ] Cookie при register/login/refresh содержит `Max-Age`, равный `REFRESH_TTL_MS / 1000` (604800).
- [ ] Остальные атрибуты не меняются: HttpOnly, SameSite=Lax, Path=/api/v1/auth, без Domain, Secure кроме development.
- [ ] Logout и очистка cookie по-прежнему удаляют её (Expires в прошлом, без положительного Max-Age).
- [ ] Срок cookie и `Session.expiresAt` определяются одной константой.
## Verification
`npm run test:e2e` (app.e2e-spec.ts) и `npm run verify`.
## Traceability
Связано с #61 (тест cookie policy).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Problem
refresh_tokencookie выставляется безMax-Age/Expires(src/modules/auth/presentation/auth.controller.tscookieOptions()), поэтому браузер считает её сессионной и удаляет при закрытии браузера/PWA. Серверная Session и refresh JWT при этом живут 7 дней. PWA обновляется только после закрытия всех окон (registerType: "prompt"), поэтому пользователь после каждого релиза вводит логин и пароль заново.Expected Behavior
Refresh cookie переживает перезапуск браузера/PWA в пределах срока Session и продлевается при каждой ротации.
Scope
In scope
maxAgeвcookieOptions(), значение из единой константыREFRESH_TTL_MS(auth.service.ts), общей сexpiresAtSession.test/app.e2e-spec.ts(сейчас они запрещаютMax-Age).Out of scope
Acceptance Criteria
Max-Age, равныйREFRESH_TTL_MS / 1000(604800).Session.expiresAtопределяются одной константой.Verification
npm run test:e2e(app.e2e-spec.ts) иnpm run verify.Traceability
Связано с #61 (тест cookie policy).