Corrige le Realtime qui ne diffusait aucun événement à travers l'app
Build and deploy / deploy (push) Successful in 37s
Build and deploy / deploy (push) Successful in 37s
Les canaux Realtime (Char, Gardien, classement, journal, calendrier, Icare) s'abonnaient juste après createClient(), avant que la session ne soit chargée de façon asynchrone — le canal rejoignait donc Supabase en rôle "anon" au lieu de "authenticated", et les policies RLS "to authenticated" bloquaient silencieusement tous les événements (l'abonnement lui-même réussissait, ce qui masquait le problème). Ajoute waitForRealtimeAuth() dans src/lib/supabase/client.ts, qui attend la session et pousse explicitement le token avant de s'abonner. Vérifié avec deux sessions navigateur distinctes : les changements se propagent maintenant réellement sans rechargement.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { createBrowserClient } from "@supabase/ssr";
|
||||
import type { SupabaseClient } from "@supabase/supabase-js";
|
||||
|
||||
export function createClient() {
|
||||
return createBrowserClient(
|
||||
@@ -6,3 +7,18 @@ export function createClient() {
|
||||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
|
||||
);
|
||||
}
|
||||
|
||||
// createClient() charge la session (et donc le token Realtime) de façon
|
||||
// asynchrone après coup : un .channel().subscribe() lancé juste après
|
||||
// rejoint le canal encore en rôle "anon", et les policies RLS
|
||||
// "to authenticated" ne laissent alors jamais passer aucun événement
|
||||
// (le canal s'abonne "avec succès" mais ne reçoit plus rien ensuite).
|
||||
// À appeler avant tout .channel(...).subscribe().
|
||||
export async function waitForRealtimeAuth(supabase: SupabaseClient) {
|
||||
const {
|
||||
data: { session },
|
||||
} = await supabase.auth.getSession();
|
||||
if (session) {
|
||||
supabase.realtime.setAuth(session.access_token);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user