Corrige l'établissement de session depuis un lien d'invitation

Le lien d'invitation Supabase redirige avec les tokens dans le FRAGMENT
d'URL (#access_token=...&refresh_token=...), jamais dans un paramètre
?code=. Un fragment n'est jamais envoyé au serveur par le navigateur
(une route serveur ne peut donc pas le lire), et le client
@supabase/ssr ne le détecte pas automatiquement (orienté sessions par
cookies). /signup parse maintenant ce fragment et appelle
auth.setSession() explicitement avant de vérifier l'utilisateur.

Supprime la route src/app/auth/callback créée par erreur sur
l'hypothèse d'un flux PKCE (?code=) qui ne correspond pas à ce que
Supabase envoie réellement pour ce type de lien.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Valentin ROBIN
2026-07-26 22:32:42 +02:00
parent e64e8d3ff2
commit 02228ba123
+17
View File
@@ -35,6 +35,23 @@ export default function SignupPage() {
useEffect(() => {
async function checkInvite() {
const supabase = createClient();
// Le lien d'invitation Supabase redirige avec les tokens dans le
// FRAGMENT d'URL (#access_token=...&refresh_token=...), jamais reçu
// par un serveur (le navigateur ne l'envoie jamais en HTTP) et pas
// auto-détecté par ce client (@supabase/ssr est orienté sessions par
// cookies) : on l'établit donc explicitement à la main, une fois.
const hash = window.location.hash;
if (hash.includes("access_token")) {
const params = new URLSearchParams(hash.slice(1));
const access_token = params.get("access_token");
const refresh_token = params.get("refresh_token");
if (access_token && refresh_token) {
await supabase.auth.setSession({ access_token, refresh_token });
}
window.history.replaceState(null, "", window.location.pathname);
}
const {
data: { user },
} = await supabase.auth.getUser();