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:
@@ -35,6 +35,23 @@ export default function SignupPage() {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
async function checkInvite() {
|
async function checkInvite() {
|
||||||
const supabase = createClient();
|
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 {
|
const {
|
||||||
data: { user },
|
data: { user },
|
||||||
} = await supabase.auth.getUser();
|
} = await supabase.auth.getUser();
|
||||||
|
|||||||
Reference in New Issue
Block a user