fix(auth): не выкидывать пользователя при сетевой ошибке refresh, access token 30 дней

- queryClient: refreshSession возвращает reason (network/unauthorized);
  при network-ошибке не делаем logout, а бросаем network_error_during_refresh.
- useAuth: checkAuth и refreshUser не сбрасывают сессию при network-ошибке
  во время refresh, переводят в офлайн-режим.
- auth.service: remember берётся из сессии, race tolerance 5 минут.
- access token lifetime унифицирован до 30 дней по умолчанию, cookie maxAge
  теперь совпадает с JWT expiry (было 15 минут fallback).
This commit is contained in:
2026-07-10 10:04:12 +03:00
parent 95279b8fcc
commit af8920f920
6 changed files with 62 additions and 24 deletions

View File

@@ -48,7 +48,7 @@ function isSecureCookie(): boolean {
}
export function setAuthCookies(res: Response, tokens: TokenPair, remember: boolean): void {
const accessMaxAge = parseExpiryToSeconds(process.env.JWT_ACCESS_EXPIRES || '15m') * 1000;
const accessMaxAge = parseExpiryToSeconds(process.env.JWT_ACCESS_EXPIRES || '30d') * 1000;
const refreshMaxAge = (remember ? REMEMBER_LIFETIME_DAYS : SESSION_LIFETIME_DAYS) * 24 * 60 * 60 * 1000;
res.cookie(ACCESS_TOKEN_COOKIE, tokens.accessToken, {
@@ -319,7 +319,7 @@ export class AuthService {
tokens: {
accessToken,
refreshToken: activeSession.refreshToken,
expiresIn: parseExpiryToSeconds(process.env.JWT_ACCESS_EXPIRES || '15m'),
expiresIn: parseExpiryToSeconds(process.env.JWT_ACCESS_EXPIRES || '30d'),
familyId: activeSession.familyId,
}
};