Отзыв 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
+6 -1
View File
@@ -161,9 +161,14 @@ def register_local(session: Session, nickname: str, password: str) -> User:
def set_password(session: Session, user: User, new_password: str) -> User:
"""Записать новый пароль. Проверку текущего делает вызывающий (игрок — да, админ — нет)."""
"""Записать новый пароль. Проверку текущего делает вызывающий (игрок — да, админ — нет).
Инкремент token_version отзывает все ранее выданные токены (#57): при смене пароля
игроком — все прочие сессии, при сбросе админом — все сессии игрока (в т.ч. злоумышленника).
Своё устройство остаётся в сессии, только если вызывающий перевыдаст cookie со свежим ver."""
validate_new_password(new_password)
user.password_hash = hash_password(new_password)
user.token_version = (user.token_version or 0) + 1
session.add(user)
session.commit()
session.refresh(user)