fix: persist refresh cookie across browser restarts (WealthLedger/backend#123) #124

Merged
codex-bot merged 2 commits from fix/123-refresh-cookie-max-age into develop 2026-10-23 08:34:39 +03:00
Owner

Closes #123
Refs #122 (backend part only; frontend/docs/specs остаются в своих репозиториях)

Проблема

refresh_token cookie выставлялась без Max-Age/Expires, поэтому браузер/PWA удалял её при закрытии, хотя Session и refresh JWT живут 7 дней. После обновления PWA (закрыть все окна) приходилось вводить логин и пароль заново.

Изменения

  • fix (53ade94): maxAge: REFRESH_TTL_MS в cookieOptions(); константа экспортируется из auth.service.ts, так что срок cookie и Session.expiresAt задаются одним значением. clearCookie не меняется (Express 5 сам убирает maxAge и ставит Expires в прошлом).
  • test: cookie policy в test/app.e2e-spec.ts теперь требует Max-Age=604800 у выданной и ротированной cookie, а у очищенной Max-Age быть не должно. Остальные атрибуты проверяются точным набором.
  • chore (0dd98b2): Node 24.21.0 → 24.22.1 в .nvmrc, Dockerfile, engines (package.json, package-lock.json) и eslint.config.mjs (#122). На 24.21.x app.e2e-spec.ts падает по SIGABRT из better-sqlite3 (nodejs/node#63985).

Проверки (Node 24.22.1)

  • npm run lint, typecheck:app, typecheck:test: чисто.
  • node test/sqlite.cjs app.e2e-spec.ts: 19/19. Без правки в src два тестa cookie policy падают.
  • npm run verify: 40 наборов, 288 тестов, зелёный (до правки eslint.config.mjs; после неё повторно прогнан npm run lint).

Влияние на релиз

Пользователи с уже выданной сессионной cookie должны один раз войти заново после этого релиза; дальше вход сохраняется на 7 дней с продлением при каждом refresh.

Вне PR

Фронт: не разлогинивать при 5xx/сетевой ошибке refresh во время деплоя (отдельная Issue во frontend).

Closes #123 Refs #122 (backend part only; frontend/docs/specs остаются в своих репозиториях) ## Проблема `refresh_token` cookie выставлялась без `Max-Age`/`Expires`, поэтому браузер/PWA удалял её при закрытии, хотя Session и refresh JWT живут 7 дней. После обновления PWA (закрыть все окна) приходилось вводить логин и пароль заново. ## Изменения - `fix` (53ade94): `maxAge: REFRESH_TTL_MS` в `cookieOptions()`; константа экспортируется из `auth.service.ts`, так что срок cookie и `Session.expiresAt` задаются одним значением. `clearCookie` не меняется (Express 5 сам убирает `maxAge` и ставит `Expires` в прошлом). - `test`: cookie policy в `test/app.e2e-spec.ts` теперь требует `Max-Age=604800` у выданной и ротированной cookie, а у очищенной `Max-Age` быть не должно. Остальные атрибуты проверяются точным набором. - `chore` (0dd98b2): Node `24.21.0` → `24.22.1` в `.nvmrc`, `Dockerfile`, `engines` (`package.json`, `package-lock.json`) и `eslint.config.mjs` (#122). На 24.21.x `app.e2e-spec.ts` падает по SIGABRT из better-sqlite3 (nodejs/node#63985). ## Проверки (Node 24.22.1) - `npm run lint`, `typecheck:app`, `typecheck:test`: чисто. - `node test/sqlite.cjs app.e2e-spec.ts`: 19/19. Без правки в `src` два тестa cookie policy падают. - `npm run verify`: 40 наборов, 288 тестов, зелёный (до правки `eslint.config.mjs`; после неё повторно прогнан `npm run lint`). ## Влияние на релиз Пользователи с уже выданной сессионной cookie должны один раз войти заново после этого релиза; дальше вход сохраняется на 7 дней с продлением при каждом refresh. ## Вне PR Фронт: не разлогинивать при 5xx/сетевой ошибке refresh во время деплоя (отдельная Issue во `frontend`).
codex-bot added the Kind/Bug
Priority
Medium
3
labels 2026-10-23 07:26:17 +03:00
ksv741 added 2 commits 2026-10-23 08:15:54 +03:00
The refresh cookie had no Max-Age, so browsers dropped it on close
while the Session stayed valid for 7 days. Set maxAge from
REFRESH_TTL_MS, the same constant behind Session.expiresAt.
chore: bump Node to 24.22.1 (WealthLedger/backend#122)
Backend verify / commits (pull_request) Successful in 28s
Backend verify / security (pull_request) Successful in 8s
Backend verify / verify (pull_request) Successful in 4m58s
ec934a34b5
Fixes the better-sqlite3 GC abort (nodejs/node#63985) in Node
24.19.0-24.21.x. Keeps all repositories on the same Node version.
ksv741 force-pushed fix/123-refresh-cookie-max-age from 0dd98b292b to ec934a34b5 2026-10-23 08:15:54 +03:00 Compare
codex-bot merged commit d1f6969dc7 into develop 2026-10-23 08:34:39 +03:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/backend#124