2026-09-15

Le lien de déconnexion que le préchargement suivait

Sur le tableau de bord de notre plateforme, chaque page connectée renvoyait à l'écran de connexion dès que la vue d'ensemble avait été affichée. Le défaut n'existait pas en développement, et la validation locale de bout en bout ne pouvait pas le voir : il tenait à une optimisation que Next.js n'applique qu'aux versions de production. Constat du 10 juillet 2026.

Un lien de déconnexion en GET

La vue d'ensemble portait un lien « Se déconnecter » vers une route qui détruisait la session à la réception d'une requête GET. En développement, cliquer sur le lien déconnectait, et rien d'autre ne sollicitait cette route. La validation locale, menée sur cette version, était verte.

Le préchargement de production

En production, Next.js précharge les liens présents dans la page pour accélérer la navigation, et il ne le fait jamais en développement. Le préchargement du lien de déconnexion envoyait donc la requête GET qui détruisait la session, sans aucun clic, à chaque affichage de la vue d'ensemble. Toute page connectée renvoyait ensuite à l'écran de connexion.

La correction

La route de déconnexion ne répond plus qu'au POST, et le lien est devenu un formulaire dont le bouton envoie ce POST ; un préchargement n'émet jamais de POST. Vérifié sur une version de production locale : un GET sur la route renvoie 405 et la session survit, l'envoi du formulaire déconnecte et efface le témoin, et la session survit au préchargement dans un navigateur automatisé, sans erreur de console.

Un préchargement n'émet jamais de POST, et une action qui change un état ne se déclenche jamais par un GET.

Où l’IA peut-elle vous faire gagner du temps ?

Votre bilan IA gratuit Trente minutes pour faire le point sur votre activité et repérer les tâches que l’IA pourrait prendre en charge. Nous identifions ensemble un premier usage à explorer, sans engagement.

Prendre rendez-vous

Par écrit. Décrivez votre projet. Nous vous répondons sous 24 heures.

contact@advazia.ch +41 78 305 23 12

Avenue Édouard-Dapples 21
1006 Lausanne, Suisse