Richiesta non autorizzata non reindirizza alla pagina di login con il parametro di stringa di query ReturnURL

StackOverflow https://stackoverflow.com/questions/4478570

Domanda

Impostazioni

Nel mio MVC3 app, MembersController è decorato con un attributo [Autorizza].

MembersController ha un'azione chiamata MyPage. A causa l'attributo Autorizza sul controller, MyPage può essere richiesto solo dagli utenti autorizzati.

Problema

Quando un non autorizzato tenta utente di richiedere / Utenti / MyPage siano correttamente reindirizzati alla pagina di accesso.

Tuttavia, il parametro ReturnUrl non viene passato nella pagina di login, in modo che quando gli utenti autentica, sono adottate per la pagina di default (consente di chiamare / Utenti / Home) invece di / Membri / MyPage.

Domanda

Perché?!

In un'altra applicazione, sviluppata in MVC2, i parametri ReturnURL QS c'è e funziona come previsto.

Altri problemi:

L'attributo Autorizzo viene ignorato quando decorare entrambi i controller e le azioni.

Risoluzione:

Le sezioni di web.config non adeguatamente aggiornato tra il .NET 3.5 e .NET 4. vedere le risposte di seguito.

È stato utile?

Soluzione

@Marcind mi ha messo sulla strada giusta, la risposta di @Darin Dimitrov molto istruttivo del processo in questione.

Diagnosi

Sembra che il problema era legato a un web.config che non ho aggiornato correttamente quando si unisce un Web Form esistenti NET 3.5 app a un NET 4.0 app. Non riesco a ricordare come sono andato su questo.

In ogni caso, confrontando il web.config della mia app con un nuovo MVC 3 web.config, sono stato in grado di trovare i bit extra che non avrebbe dovuto essere lì, lasciati da 3,5 giorni.

Risoluzione:

Il problema è stato risolto correggendo i bit in tag nel web.config, così come il tag , .

Altri problemi causati da questo:

Un altro problema causato da questa è stato il fatto che se ho decorato un controller con l'attributo Autorizza, è stato ignorato, in modo che il controllore ha cercato di informazioni di processo in base all'utente corrente, che ovviamente era nullo, così ogni sorta di eccezioni erano licenziato.

Altri suggerimenti

Funziona per me. Ho creato un nuovo progetto utilizzando l'ASP.NET MVC 3 RC2, modello predefinito, ha aggiunto un MembersController, decorato con l'attributo [Authorize], eseguire l'applicazione, /members/index richiesto, è stato reindirizzato a /Account/LogOn?ReturnUrl=%2fmembers%2findex, collegato, è stato reindirizzato a /members/index. Ci deve essere qualcosa che non va con il codice.

Ecco come funziona:

  • I controlli degli attributi [Authorize] se l'utente è autenticato e se non è restituisce 401 codice di stato.
  • Il FormsAuthenticationModule che fa parte del ASP.NET e maniglie forme di autenticazione intercetta il codice di stato 401 e reindirizza alla pagina di accesso aggiungendo il parametro ReturnUrl alla richiesta, che punti alla richiesta iniziale.

Il modulo FormsAuthenticationModule non è specifico per ASP.NET MVC, questa è roba ASP.NET standard

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top