10

Setup (usando MVC 4)ASP.net MVC filtro globale Autorizza costringendo login su un'azione AllowAnonymous

public class MyAuthorizeAttribute : AuthorizeAttribute { 

    protected override bool AuthorizeCore(HttpContextBase httpContext) { 

     var isAuthorised = base.AuthorizeCore(httpContext); 

     if(isAuthorised) { 
      // retrieve authentication ticket from cookie and 
      // create custome principal and attach to 
      // httpContext.User 
     } 

     return isAuthorised; 
    } 
} 

Gloabl.asax.cs:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    filters.Add(new MyAuthorizeAttribute()); 
} 

HomeController.cs:

using System.Web.Mvc; 

public class HomeController : Controller 
{ 
    [AllowAnonymous] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

Problema

Una chiamata alla pagina iniziale impone la pagina di accesso da caricare.

Domanda

Quando il) azione (HomeController.Index è decorato con [AllowAnonymous], perché mi ASP reindirizza alla vista di accesso?

Sto usando this articolo per riferimento

+0

Ho appena controllato con Autorizzazione integrata e sta funzionando bene per me. Potrebbe essere necessario verificare con il proprio codice di autorizzazione personalizzato. – VJAI

+0

Ho provato con l'attributo Authorize incorporato, sostituendo l'attributo che viene aggiunto al filtro globale nel mio global.asax ma sto ancora venendo reindirizzato alla pagina di login quando si chiama l'azione index sul controller principale. Mi sto perdendo qualcosa? Qualche impostazione nella mia configurazione web? Non sono configurato provider di appartenenze, provider di ruoli o provider di profili. Dovrei avere? –

+0

Le impostazioni di autenticazione dei moduli in web.config è quella che reindirizza alla pagina di accesso. Ma non hai bisogno di ulteriori impostazioni. Ho provato creando un nuovo modello di applicazione/Internet MVC 4 che contrassegna il controller Home con l'azione Autorizza e indicizza con AllowAnonymous e ha funzionato come previsto. – VJAI

risposta

-1

Anche se questa non è una risposta, ma ..

Prova con il built-in Authorize codice e assicurarsi AllowAnonymous sta lavorando bene. Vedo nella vostra abitudine autorizzare commenti si sta cercando di

recuperare ticket di autenticazione da biscotto e creare custome capitale e allegare alla HttpContext.User

vorrei suggerire di fare quel processo molto prima nel Application_AuthenticateRequest di Global.asax.cs come specificato in questo thread.

+0

come da mio commento sopra, ho provato a utilizzare AuthorizeAttribute ma continuando a reindirizzare per accedere. Cosa dà? –

11

Come per il mio commento sulla domanda originale. Il problema era che la vista indice stava chiamando le azioni su altri controllori che restituivano viste parziali. Solo un caso di esaminare tutto e rimuovere il vecchio attributo [Autorizza].

+4

Se questo ha risolto il problema, contrassegnalo come risposta. Puoi rispondere alle tue domande. –

+0

Grande scoperta! Stavo sbattendo la testa contro il muro su questo! Non riuscivo a capire perché dovevo "disconnettermi" e tornare alla mia home page mi porterebbe automaticamente attraverso il log in di nuovo. Grazie! – Airn5475

2

Ho avuto un problema simile e alla fine ho usato la classe AllowAnonymousAttribute errata. Ci sono due classi AllowAnonymousAttribute:

Nel tuo caso si deve utilizzare, naturalmente, l'uno da System.Web.Mvc :)

I Ho trascorso più di un'ora a capirlo nel mio programma

5

Anche se il poster originale ha trovato la causa nel suo caso, vorrei condividere la mia risoluzione, poiché mi sono imbattuto in questa domanda di fronte agli stessi sintomi.

Nella mia rete.file di configurazione ho avuto, obbedendo alla logica della webforms:

<authorization> 
    <deny users="?" /> 
</authorization> 

Non deve avere questo, in quanto impedisce la richiesta di eseguire qualsiasi azione senza effettuare il login prima, tranne che per l'azione di login al quale il reindirizzamento avviene . L'ho scoperto solo quando ho provato ad aggiungere una seconda azione pubblica.

+0

Ho fatto la stessa cosa. Scoperto quando aggiunto un'altra azione pubblica. – Mitul

+0

Grazie per aver aggiunto questo, mi ha aiutato a uscire, quattro anni dopo la pubblicazione! –

Problemi correlati