fix: wait for auth session before connecting to realtime channel
On initial page load, the Supabase browser client's auth session may not be ready yet (still loading from cookies). The Realtime channel subscription silently fails without a valid access token. Now connect() awaits getSession() first, which ensures the token is available and also refreshes expired tokens on reconnect after inactivity. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
9769a80381
commit
3b19f58e26
|
|
@ -77,6 +77,21 @@ export class RealtimeConnection {
|
||||||
this.resetInactivityTimer()
|
this.resetInactivityTimer()
|
||||||
this.clearConnectionTimer()
|
this.clearConnectionTimer()
|
||||||
|
|
||||||
|
// Ensure the Supabase client has a valid auth session before connecting.
|
||||||
|
// On initial page load, the session may still be loading from cookies.
|
||||||
|
try {
|
||||||
|
const { data: { session } } = await this.supabase.auth.getSession()
|
||||||
|
if (!session && !this.isDestroyed) {
|
||||||
|
// No session yet - wait briefly and retry
|
||||||
|
this.scheduleReconnect()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// Session check failed - proceed anyway, channel will handle auth errors
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.isDestroyed || this.isPaused) return
|
||||||
|
|
||||||
// Set a timeout: if we don't connect within CONNECTION_TIMEOUT_MS, retry
|
// Set a timeout: if we don't connect within CONNECTION_TIMEOUT_MS, retry
|
||||||
this.connectionTimer = setTimeout(() => {
|
this.connectionTimer = setTimeout(() => {
|
||||||
if (this.isDestroyed || this.isPaused) return
|
if (this.isDestroyed || this.isPaused) return
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue