Una richiesta rifiutata non termina più la chiamata e la sessione

Fixkamo-internal
Spegnimento
6 settembre 2026 alle ore 00:55 UTC
Autore
Kamo
Impegno
f68bcce

L'ultimo modo in cui un membro potrebbe perdere una chiamata dal vivo e tutto nel loro strumento finestre senza fare niente di male. `authenticatedFetch` risposto EVERY 401 con `window.location.href = '/logout'` — da settantuno siti di chiamata, senza alcun controllo che la sessione avesse effettivamente Finito. Questa è la cosa più pesante che questa applicazione può fare dal cliente: documento in giù, che termina la sessione SIP vivendo in esso, e cancella il sessione condivisa Redis che le altre schede del membro stanno ancora lavorando. Un 401 è semplicemente il modo più comune che un server dice "non questa richiesta"; non è una prova che la sessione è finita. I due percorsi di codice a lato di esso già sapevano che e questo non lo ha fatto. `sessionMonitor` richiede due 401 consecutivi prima di chiamare un token respinto, e sonde di avvertimento di scadenza di `SessionManager` /api/session/info e segni fuori solo su 404, 401 o un TTL a zero, per i motivi dichiarati che "un transitorio rete blip o 5xx non deve mai firmare un utente attivo". Questo rende il terzo concordare con loro: - A 401 ora conferma prima di reindirizzare, usando la stessa sonda. 404, 401 o TTL <=0 significa andato e il logout procede esattamente come prima. A 5xx, un offline sonda, o una sessione dal vivo significa che il punto finale ha rifiutato questa richiesta, che è consegnato al chiamante come un normale `errore non autorizzato ` invece di essere rispose distruggendo la scheda. - Una scheda che non tiene conto del proprio non è mai firmata su un 401, per il motivo sessionMonitor scrive per il proprio ramo: non è mai stato autenticato QUI, così il suo 401 significa "nessuna credenziali in questa scheda", e reindirizzamento cancellerebbe un Redis sessione i suoi fratelli stanno ancora usando. - La sonda è condivisa durante il volo. Una pagina che spara sei autenticati richiede subito sei 401s contemporaneamente, e questa è una domanda, non sei. - useEntitlements' `isAbandoned` continua a leggere "Sessione scaduta" e quindi significa ancora "il documento sta partendo"; una sessione di vita 401 ora passa la riprova ordinaria del caricatore e il self-heal, che è quello che dovrebbe sempre avere E' successo. E pin le protezioni di chiamata, che niente era in posizione: Una sessione SIP vive in questo documento e nulla sul server ha una maniglia da Quindi una lacrima finisce la chiamata. Cinque superfici si trovano tra una chiamata e che, e ognuno è un effetto all'interno di un grande file — il carico anteriore conferma, l'attività battito cardiaco che mantiene il TTL vivo mentre qualcuno sta ascoltando piuttosto che scrivere, il navigatore BYE per quando una lacrima è comunque inevitabile, il veto stretto della finestra, e ora la conferma 401. liveCallSurvival.test pin tutti e cinque, e non riesce quando uno viene rimosso (verificata rimuovendo tre). Greps sorgente piuttosto che test comportamentali, deliberatamente: vitest.config.ts raccoglie app/lib, app/componenti, app/pazienti, app/store, app/network e app/utils — NON app/contesti o app/hooks, dove vivono tre dei cinque. Un test scritto accanto a loro sarebbe raccolto da nulla e passare non correndo mai. 456 file di prova passa; eslint è pulito su ogni file toccato.

Tutte le modifiche

Come quello che vedi la spedizione?

Ognuno di questi aggiornamenti atterra automaticamente nello spazio di lavoro. Inizia gratis e guardalo crescere settimana dopo settimana.

Inizia gratis per sempreVisualizza il prezzo