Отзыв JWT при выходе и смене пароля

logout отзывает предъявленный токен по jti (in-memory denylist до exp);
смена и сброс пароля инкрементят users.token_version (claim ver в JWT,
сверка в auth/deps) — все прежние сессии отзываются. Своё устройство при
смене пароля остаётся в сессии (перевыдача cookie). Миграция 0013. #57

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XfTsytzT6TojfmprRDKiV6
This commit is contained in:
2026-09-13 17:09:57 +03:00
co-authored by Claude Opus 4.8
parent d84cef2491
commit 3f8667b561
12 changed files with 236 additions and 12 deletions
+2
View File
@@ -20,6 +20,7 @@ from sqlmodel import Session, SQLModel, create_engine, select # noqa: E402
import app.models # noqa: F401,E402 (регистрация моделей)
from app.core.ratelimit import login_throttle # noqa: E402
from app.core.security import hash_password # noqa: E402
from app.core.token_revocation import revoked_tokens # noqa: E402
from app.db.session import get_session # noqa: E402
from app.main import app # noqa: E402
from app.models import AuthIdentity, GroupMember, User # noqa: E402
@@ -50,6 +51,7 @@ def client(engine):
app.dependency_overrides[get_session] = _get_session
login_throttle.clear() # счётчики неудачных входов глобальны для процесса
revoked_tokens.clear() # denylist отозванных токенов тоже глобален для процесса
with TestClient(app) as c:
yield c
app.dependency_overrides.clear()