Repository navigation
Bottoni che portano dove dicono, e una sessione che non si perde in silenzio - #19
Merged
Merged
Conversation
…ilenzio
Tre guasti, tutti invisibili: nessun errore in console, nessuna richiesta
fallita, solo un bottone che porta altrove e dei progressi che smettono di
salvarsi.
1. href('metodo') invece di href('method'). La chiave non esisteva, href()
ricadeva sulla home senza dire niente, e il bottone «Come è fatto questo
corso» — in fondo a OGNI lezione, in tutte e tre le lingue — portava alla
mappa. Risponde 200: nessun controllo sugli stati HTTP lo avrebbe visto.
Adesso una pagina inesistente è un errore, non un ripiego.
2. l.file usato nudo come href nella mappa. È un indirizzo relativo, e la home
inglese si raggiunge sia come /en/ sia come /en — l'.htaccess toglieva la
barra finale con un 301, quindi la seconda era la forma in cui ci si
ritrovava davvero. Da lì «lessons/01-qubit.html» diventava
/lessons/01-qubit.html: 404 su tutte le carte della mappa e sul bottone
«Continua», in inglese e in spagnolo. Ora l'indirizzo lo compone
lessonHref(), che parte dalla radice, ed è uno solo per tutto il sito.
L'.htaccess smette anche di rimandare altrove /en/ e /es/, che sono gli
indirizzi scritti nel canonical, negli hreflang e nella sitemap.
3. Il token CSRF si chiedeva a /sanctum/csrf-cookie, rotta di un pacchetto che
qui non è installato: 404, ignorato di proposito. Finché la pagina era
appena stata caricata funzionava lo stesso, perché il cookie lo mette anche
la pagina; ma il token scade con la sessione, cioè dopo due ore, e chi gioca
sta sulla stessa pagina anche più a lungo. Da lì ogni salvataggio tornava
419 — e un token scaduto non viene rinnovato dalla risposta che lo rifiuta,
quindi non se ne usciva più: la partita continuava e niente si salvava.
L'esame finale, che è un POST solo, si perdeva per intero. Adesso c'è
GET /api/csrf, e davanti a un 419 il client riprende il token e rimanda la
richiesta, una volta sola.
Il quarto guasto — i tag «<b>» scritti in chiaro nel riquadro «Livello
superato» — era già corretto nel codice ma non era protetto da niente:
succedeva perché la frase era passata a h() come figlio, che crea un nodo di
TESTO, invece che come { html: … }. Ora un controllo lo vede.
Collaudo, perché ognuno di questi passava indenne dai test che c'erano:
- tests/js/unit/indirizzi.test.js: gli indirizzi prodotti, lingua per lingua
- tests/js/unit/api.test.js: il giro del token CSRF e il 419
- tests/Feature/SessioneTest.php: la rotta del token e il cookie «ricordami»
- tests/js/e2e/05-link.spec.js, 06-link-dentro.spec.js: dove portano davvero i
bottoni, comprese le home senza barra finale e il riquadro a livello finito
- tools/validate.mjs: markup passato come figlio di h(), nomi di pagina
inesistenti, indirizzi di livello relativi, eccezione dell'.htaccess
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0123HAw4ybUrziyBM91pzLna
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Tre guasti, tutti invisibili: nessun errore in console, nessuna richiesta
fallita, solo un bottone che porta altrove e dei progressi che smettono di
salvarsi.
href('metodo') invece di href('method'). La chiave non esisteva, href()
ricadeva sulla home senza dire niente, e il bottone «Come è fatto questo
corso» — in fondo a OGNI lezione, in tutte e tre le lingue — portava alla
mappa. Risponde 200: nessun controllo sugli stati HTTP lo avrebbe visto.
Adesso una pagina inesistente è un errore, non un ripiego.
l.file usato nudo come href nella mappa. È un indirizzo relativo, e la home
inglese si raggiunge sia come /en/ sia come /en — l'.htaccess toglieva la
barra finale con un 301, quindi la seconda era la forma in cui ci si
ritrovava davvero. Da lì «lessons/01-qubit.html» diventava
/lessons/01-qubit.html: 404 su tutte le carte della mappa e sul bottone
«Continua», in inglese e in spagnolo. Ora l'indirizzo lo compone
lessonHref(), che parte dalla radice, ed è uno solo per tutto il sito.
L'.htaccess smette anche di rimandare altrove /en/ e /es/, che sono gli
indirizzi scritti nel canonical, negli hreflang e nella sitemap.
Il token CSRF si chiedeva a /sanctum/csrf-cookie, rotta di un pacchetto che
qui non è installato: 404, ignorato di proposito. Finché la pagina era
appena stata caricata funzionava lo stesso, perché il cookie lo mette anche
la pagina; ma il token scade con la sessione, cioè dopo due ore, e chi gioca
sta sulla stessa pagina anche più a lungo. Da lì ogni salvataggio tornava
419 — e un token scaduto non viene rinnovato dalla risposta che lo rifiuta,
quindi non se ne usciva più: la partita continuava e niente si salvava.
L'esame finale, che è un POST solo, si perdeva per intero. Adesso c'è
GET /api/csrf, e davanti a un 419 il client riprende il token e rimanda la
richiesta, una volta sola.
Il quarto guasto — i tag «» scritti in chiaro nel riquadro «Livello
superato» — era già corretto nel codice ma non era protetto da niente:
succedeva perché la frase era passata a h() come figlio, che crea un nodo di
TESTO, invece che come { html: … }. Ora un controllo lo vede.
Collaudo, perché ognuno di questi passava indenne dai test che c'erano:
bottoni, comprese le home senza barra finale e il riquadro a livello finito
inesistenti, indirizzi di livello relativi, eccezione dell'.htaccess
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_0123HAw4ybUrziyBM91pzLna