feat(auth): шаг 0.6 — TTL access 15 минут + хэширование refresh/reset-токенов в БД
Some checks are pending
Branch Check / Type Check & Build (push) Waiting to run
Some checks are pending
Branch Check / Type Check & Build (push) Waiting to run
- server/utils/jwt.ts: дефолт JWT_ACCESS_EXPIRES 30d → 15m (env сохранено), hashToken() (sha256 hex) - migrations/0082_token_hashes.sql: *_hash колонки в user_sessions/users, DELETE FROM user_sessions (глобальный разлогин), legacy plain-колонки сохранены, но не пишутся - storage: lookup/отзыв сессий и reset-токенов по хэшу; markSessionReplaced по id сессии - auth.service: ротация в rotateFamilySession(), grace-period ротирует активную сессию вместо возврата plain-токена - auth.core.routes: forgot/reset-password пишут/ищут sha256-хэш, plain только в письме - tests/token-security.test.ts: 12 тестов (выпуск по хэшу, ротация, reuse detection, grace, reset) - .env.example, swagger, IMPLEMENTATION_LOG.md обновлены Проверки: npm run check чисто, vitest 118/118, lint 0 errors, build собирается
This commit is contained in:
@@ -11,7 +11,9 @@ JWT_SUPERADMIN_SECRET=your-superadmin-secret-here
|
||||
# JWT_BOT_SECRET=your-bot-secret-here
|
||||
|
||||
# Token expiry (optional — these are the defaults)
|
||||
# JWT_ACCESS_EXPIRES=30d
|
||||
# Access-токен короткоживущий (15 минут, шаг 0.6): клиент обновляет его через
|
||||
# /api/auth/refresh по httpOnly refresh-cookie. Увеличивать только осознанно.
|
||||
# JWT_ACCESS_EXPIRES=15m
|
||||
# JWT_REFRESH_EXPIRES_REMEMBER=90d
|
||||
# JWT_REFRESH_EXPIRES_SESSION=30d
|
||||
# JWT_SUPERADMIN_EXPIRES=1h
|
||||
|
||||
Reference in New Issue
Block a user