Ecco lo scenario:Un modo di gestire correttamente HttpAntiForgeryException in MVC 4 applicazione
Ho una pagina di login, quando l'utente firmarlo è reindirizzato alla pagina dell'applicazione casa. Quindi l'utente utilizza il pulsante Indietro del browser e ora si trova nella pagina di accesso. Cerca di login di nuovo, ma ora viene generata un'eccezione:
HttpAntiForgeryException (0x80004005): Il token anti-contraffazione previsto era destinato per l'utente "", ma l'utente corrente è "username".
So che questo è correlato al caching. Ho disattivato il caching del browser per l'azione di login utilizzando il filtro NoCache personalizzato che imposta tutte le intestazioni necessarie - no-cache, no-store, must-rinnovo, ecc Ma
- questo non funziona su tutti i browser
- soprattutto Safari (nella maggior parte dei casi mobile) ignora totalmente tali impostazioni
Cercherò di fare in modo che gli hack e il force safari mobile si aggiornino, ma questo non è quello che mi aspetto.
Vorrei sapere se posso:
- eccezione maniglia senza mostrare all'utente alcun problema esiste (totalmente trasparente per l'utente)
- evitare questo problema sostituendo contro contraffazione token nome utente che sarà consentire nuovamente l'accesso utente senza questa eccezione, se i miei hack relativi alla memorizzazione nella cache del browser smetteranno di funzionare nelle prossime versioni dei browser.
- Mi piacerebbe davvero non fare affidamento sul comportamento del browser, dal momento che ognuno si comporta in modo diverso.
UPDATE 1
di fare qualche precisazione, so come gestire gli errori in MVC. Il problema è che questo errore di gestione non risolve affatto il mio problema. L'idea di base della gestione degli errori è il reindirizzamento alla pagina di errore personalizzata con un bel messaggio. Ma voglio evitare che questo errore si verifichi, non gestirlo in modo visibile all'utente. Per maniglia intendo catch make nome utente sostitutivo o altra azione appropriata, quindi continuare il login.
UPDATE 2
ho aggiunto sotto soluzione che sta lavorando per me.
questo ha funzionato alla grande per me. Non ne ho bisogno per fare fantasia. Basta non gettare lo schermo giallo. – hal9000