-
-
Notifications
You must be signed in to change notification settings - Fork 415
Description
Estou usando @supabase/supabase-js v2.51.0 em um app React + Vite.
O client é criado apenas uma vez, assim:
import { createClient } from '@supabase/supabase-js';
export const supabase = createClient('https://eydlufrihlirdsvvowno.supabase.co', '', {
auth: {
autoRefreshToken: true,
persistSession: true,
detectSessionInUrl: false,
flowType: 'pkce',
}
});
O storageKey padrão é usado (sb-eydlufrihlirdsvvowno-auth-token).
O token é salvo corretamente no localStorage após login.
Problema
Após login, tudo funciona normalmente.
Após recarregar a página (reload), o evento onAuthStateChange: INITIAL_SESSION retorna null, mesmo com o token válido presente no localStorage.
O usuário é redirecionado para a tela de login, como se não estivesse autenticado.
O login manual funciona, mas o reload sempre volta para login.
Testado em build de produção (yarn build && yarn preview), aba anônima, browsers diferentes.
O código do AuthContext segue o padrão oficial do Supabase v2, usando apenas o listener de onAuthStateChange.
O que já foi tentado
Atualizar o SDK para a última versão.
Garantir que só existe um createClient.
Usar storageKey padrão.
Testar em diferentes navegadores e ambientes.
Limpar localStorage e refazer o fluxo.
Não há múltiplas instâncias do client.
useEffect(() => {
let mounted = true;
setIsLoading(true);
const { data: listener } = supabase.auth.onAuthStateChange(async (event, session) => {
console.log('[Auth] Evento onAuthStateChange:', event, session);
if (event === 'INITIAL_SESSION') {
if (session && session.user) {
// ...restaura usuário...
} else {
// Nenhuma sessão encontrada
clearAuthState();
}
if (mounted) setIsLoading(false);
}
// ...SIGNED_IN/SIGNED_OUT...
});
return () => {
mounted = false;
listener?.subscription.unsubscribe();
};
}, [navigate, location.pathname]);


Existe algum bug conhecido ou configuração extra para garantir a restauração automática da sessão no Supabase v2?
Alguma recomendação para contornar esse problema?
Obrigado!