Documentation

Sessions globales (admin)

Vue + révocation cross-users de toutes les sessions actives, filtres pays/provider/inactivité.

Page admin /admin/sessions — diffère du tab "Sessions" dans /account/settings qui n'affiche que tes propres sessions.

Filtres

  • Country (code 2 lettres : FR, US…)
  • Provider (credentials, google, github…)
  • Inactif depuis N jours

L'API list (GET /api/admin/sessions) renvoie 50 par page (cursor-based) avec le user de chaque session inclus.

Bulk revoke

Deux modes :

POST /api/admin/sessions/bulk
// Mode 1 — par filtre
{ inactiveDays: 90 }

// Mode 2 — IDs explicites (≤ 500)
{ sessionIds: [...] }

Sur succès : delete des UserSession concernées + bump du tokenVersion sur chaque user affecté → les JWT sont invalidés au refresh suivant.

Self-exclusion

Hard-coded : on n'inclut jamais :

  • la session courante de l'admin (token.sid)
  • les autres sessions de l'admin courant (userId !== session.user.id)

Évite le scénario "j'ai cliqué Révoquer Inactifs 30j et je me suis déconnecté tout seul".

UI

Bouton "Révoquer le filtre" → applique le filtre courant en mode bulk. Action par row : "Révoquer" → revoke d'une seule session.

<DataList> pour le rendu (table desktop / cards mobile).

Modèle

Pas de nouveau modèle — réutilise UserSession qui existe déjà :

model UserSession {
  id           String   @id @default(cuid())
  userId       String
  userAgent    String?
  ip           String?
  country      String?
  city         String?
  provider     String   @default("credentials")
  createdAt    DateTime @default(now())
  lastActiveAt DateTime @default(now())
}

Audit : session.bulk_revoke avec metadata.revoked + users + inactiveDays.

On this page