Activity log (perso)
Page user /account/activity — historique des actions sensibles (sécurité, sessions, partages).
Différent de LoginHistory (technique, par device) et de AuditLog
(global, admin-facing). L'activity log perso est une vue lisible
des actions sensibles que l'user a effectuées sur son compte.
Page : /account/activity. Accessible aussi depuis la sidebar user.
Source de données
On lit AuditLog filtré sur userId = session.user.id puis on whitelist
les actions visibles côté user — sinon le journal serait pollué par les
opérations admin / cron / webhook qui ont son ID au passage.
const VISIBLE_ACTIONS = new Set([
"user.register",
"user.password_changed",
"user.email_changed",
"user.2fa_enabled",
"user.2fa_disabled",
"auth.password_reset_requested",
"auth.password_reset",
]);
const VISIBLE_PREFIXES = ["session.", "apikey.", "org.", "coupon.redeem"];API : GET /api/user/activity?cursor=... — pagination cursor.
Rendu
Liste card-only via <DataList hideToggle defaultView="card">. Chaque
action a une icône + libellé humain (mapping ACTION_DISPLAY dans
activity-list.tsx).
Exemple :
- 🔑 Mot de passe modifié — il y a 3 jours
- 🛡️ Authentification à deux facteurs activée — la semaine dernière
- 📧 Email modifié — il y a 1 mois
Étendre
Pour qu'une nouvelle action apparaisse dans l'activity log :
- Logger via
logAudit({ userId, action: "user.something" }) - Whitelist dans
app/api/user/activity/route.ts(ajouter àVISIBLE_ACTIONSouVISIBLE_PREFIXES) - Mapper un libellé + icône dans
activity-list.tsx → ACTION_DISPLAY
Allez plus loin
- Audit log — version admin globale
- Compte utilisateur — tour des autres pages user