5

Ho appena iniziato a utilizzare ASP.NET MVC 5 (ho già utilizzato molte versioni precedenti) e ho un problema molto strano: ho creato un nuovo sito Web utilizzando il modello ASP.NET di Visual Studio 2013 (completamente aggiornato). Per le opzioni del modello ho selezionato il modello MVC, il tipo di autenticazione "Account utente singolo", nessun cloud hosting e nessun altro componente rispetto alla libreria MVC principale. Dopo aver convalidato le opzioni, aggiorno tutti i pacchetti NuGet. E dopo di ciò premo F5 (senza aprire o modificare nessuno dei nuovi file di progetto).ASP.NET MVC 5: reindirizzamento senza fine alla pagina di accesso utilizzando il modello di sito

Il browser si apre solo per mostrare una pagina di errore, a causa di un loop di reindirizzamento infinite: l'URL mostra:

http://localhost:24585/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl%253D%25252FAccount%25252FLogin%25253FReturnUrl%25253D%2525252FAccount%252525<snip> 

Ancora una volta, questo è con il brodo, non modificato modello ASP.NET MVC. Ho fatto controllare che l'URL di accesso è definito nelle opzioni dei cookie auth, e che sembra buono:

// Configure the sign in cookie 
app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
    LoginPath = new PathString("/Account/Login"), 
    Provider = new CookieAuthenticationProvider 
    { 
     // Enables the application to validate the security stamp when the user logs in. 
     // This is a security feature which is used when you change a password or add an external login to your account. 
     OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
      validateInterval: TimeSpan.FromMinutes(30), 
      regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
    } 
});    

L'unica cosa che potrebbe forse rompere il sito Web predefinito è qualcosa nei file globali web.config/Machine.config , anche se di solito evito di fare scherzi con loro sul mio box di sviluppo. L'avvio del modello senza aggiornare i pacchetti NuGet non risolve il problema. Probabilmente c'è qualcosa di sbagliato nella lib di Identity di ASP.NET, ma non lo conosco davvero e non sono riuscito a trovare alcuna informazione pertinente correlata al mio problema.

Domanda: Qualcuno sa qual è il problema, o almeno qual è il modo migliore per risolvere questo problema?

Grazie

+0

È necessario almeno creare la pagina di accesso '[AllowAnonymous]' – tweray

+0

La pagina di accesso contiene già il filtro '[AllowAnonymous]' nel modello di sito. – Shtong

+0

Qualcosa da qualche parte richiede un login per rendere effettivamente l'azione di login. Se hai già aggiunto '[AllowAnonymous]' all'azione di login, controlla eventuali azioni child che vengono chiamate dal layout o dalla vista. Se qualcuno di questi è in un controller con '[Authorize]' applicato, ha anche bisogno di '[AllowAnonymous]'. –

risposta

10

Ok, quindi dopo il sonno una buona notte di Ho finito per trovare ciò che è sbagliato: il problema era nella configurazione di IIS Express, che non è stato azzerato per qualche motivo quando ho creato un nuovo progetto, e probabilmente ereditato una precedenti impostazioni del progetto. Aveva l'autenticazione anonima disabilitata e l'autenticazione di Windows abilitata, che non era compatibile con il web.config predefinito creato dal modello, poiché aveva la modalità di autenticazione impostata su None. Quindi IIS si aspettava un'autenticazione di Windows prima che ogni risorsa fosse servita e il sito Web non chiedeva credenziali di Windows. E lì abbiamo un ciclo infinito.

TL; DR Se si verifica lo stesso problema, controllare le proprietà del progetto (selezionare il progetto in Solution Explorer e premere F4). La voce Anonymous Authentication deve essere impostata su Enabled e la voce Windows Authentication deve essere impostata su Disabled. Si noti che questo è valido solo se non si seleziona Autenticazione di Windows nelle impostazioni del modello!

+0

Come nota a margine per i principianti, l'utilizzo di un modello implica l'uso di un'associazione basata su Javascript e il tuo accountController.cs richiede [Autorizza] per qualsiasi utilizzo dell'API Web che viene chiamato tramite la sezione ~/bundle/Knockout del file Indice della tua casa. : http://stackoverflow.com/questions/24269028/vs2013-asp-net-mvc-single-page-application-template-auto-redirection – JosephMCasey