Skip to content

feat: session/device management with revocable JWT sessions#17

Merged
kemalcalak merged 11 commits into
mainfrom
feature/session-management
Jun 13, 2026
Merged

feat: session/device management with revocable JWT sessions#17
kemalcalak merged 11 commits into
mainfrom
feature/session-management

Conversation

@kemalcalak

Copy link
Copy Markdown
Owner

No description provided.

@kemalcalak kemalcalak self-assigned this Jun 12, 2026
@kemalcalak

Copy link
Copy Markdown
Owner Author

/review — 2 bulgu

1. Şifre değişiminde sessions_revoked canlı yayını eksik

Dosya: app/services/auth_service.py#L738-L742
Kategori: bug · Önem: minor

change_password_service tüm oturumları DB'de iptal edip Redis sid flag'lerini set ediyor, ancak kardeş iki iptal yolunun (session_service.py:77-80 ve :107-110) aksine publish_safe(account_topic(...), SESSIONS_REVOKED) yayınını yapmıyor. Sonuç: diğer cihazlardaki açık sekmeler anında login'e düşmez, yalnızca bir sonraki API çağrısında kopar — README'nin "password change ... broadcasts sessions_revoked so open tabs drop to login live" vaadiyle çelişir.

revoked = await revoke_all_sessions(session, user_id=current_user.id)
if revoked:
    await flag_sessions_revoked([s.id for s in revoked])

Öneri: flag_sessions_revoked çağrısından sonra await publish_safe(account_topic(current_user.id), AccountEvent(type=AccountEventType.SESSIONS_REVOKED)) ekle ve ilgili import'ları (app.core.realtime, app.schemas.account) dahil et.


2. Yeni session env değişkenleri .env.example'a eklenmemiş

Dosya: app/core/config.py#L131-L133
Kategori: bug · Önem: minor

SESSION_REVOKED_RETENTION_DAYS, SESSION_PURGE_CRON_HOUR ve SESSION_PURGE_CRON_MINUTE Settings sınıfına eklendi ancak .env.example güncellenmedi (dosyada hiç SESSION değişkeni yok). Varsayılanları olsa da operatörlerin görmesi gereken yapılandırma parametreleri; konvansiyon yeni Settings alanlarının .env.example'a yansıtılmasını gerektiriyor.

SESSION_REVOKED_RETENTION_DAYS: int = 30
SESSION_PURGE_CRON_HOUR: int = 4
SESSION_PURGE_CRON_MINUTE: int = 0

Öneri: .env.example'a kısa birer yorumla SESSION_REVOKED_RETENTION_DAYS=30, SESSION_PURGE_CRON_HOUR=4, SESSION_PURGE_CRON_MINUTE=0 satırlarını ekle.


🤖 Generated with Claude Code

@kemalcalak

Copy link
Copy Markdown
Owner Author

/review — temiz

Önceki review'da işaret edilen iki bulgu b0ec39b ile giderildi:

  • Şifre değişiminde sessions_revoked canlı yayını eklendi (change_password_service), session-service iptal yollarıyla aynı desende.
  • SESSION_* ayarları .env.example'a eklendi (operatöre görünürlük amaçlı — not: bu repo varsayılanlı job ayarlarını dosyaya koymadığından bu zorunlu bir konvansiyon değil, isteğe bağlı bir iyileştirmedir).

Güncel head'de REVIEW.md kurallarına aykırı veya tespit edilebilir bir bug bulunamadı. test_sessions.py 13/13 geçiyor.

🤖 Generated with Claude Code

@kemalcalak kemalcalak merged commit ebd103a into main Jun 13, 2026
1 check passed
@kemalcalak kemalcalak deleted the feature/session-management branch June 14, 2026 16:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant