Logout Convex : pourquoi il faut un full reload
// Ce qu'on fait naturellement
await authClient.signOut();
router.push("/login");Ça marche. L'utilisateur arrive sur /login. Le cookie est supprimé.
Mais si tu vas inspecter le réseau ou que tu poses un console.log sur tes queries Convex — elles tournent encore. Pendant quelques secondes, l'ancien cache Convex est toujours actif.
Dans la plupart des apps ça ne pose pas de problème visible. Mais sur des données sensibles — commandes, soldes, infos personnelles — tu risques d'afficher des données de l'ancienne session à l'utilisateur suivant qui se connecte sur le même appareil.
La cause : Convex garde un cache en mémoire côté client. router.push() ne le vide pas. Seul un rechargement complet de la page le vide.
// Le fix
await authClient.signOut();
window.location.href = "/login"; // full reload — pas router.pushUne ligne de différence. Comportement fondamentalement différent.
router.push : navigation côté client, cache intact.
window.location.href : rechargement complet, tout repart de zéro.
Pour une app avec des données financières ou personnelles — c'est non négociable.